如何读取文本文件
字符串的编码与解码
s = u'你好'
print(s.encode('utf8')) #编码
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf8')) #解码
写入文本
f = open('test.txt', 'w', encoding='utf8')
f.write(s)
f.close()
读出文本
f = open('test.txt', 'r', encoding='utf8')
print(f.read())
f.close()
如何处理二进制文件
以下,以处理一个声音文件(wav格式)为例。
f = open('aa.wav','rb')
info = f.read(44) # wav文件头信息
读取文件信息。
from struct import unpack
print(unpack('h', b'\x01\x02'))
print(unpack('>h', b'\x01\x02'))
print(unpack('h', info[22:24]))
print(unpack('i', info[24:28]))
print(unpack('h', info[34:36]))
读取文件信息。
from array import array
f.seek(0, 2)
n = int((f.tell() - 44)/2)
buf = array('h', (0 for _ in range(n)))
f.seek(44)
f.readinto(buf)
print(buf[0])
读取文件信息。
for i in range(n):
buf[i] = int(buf[i]/8)
f2 = open('bb.wav', 'wb')
f2.write(info)
buf.tofile(f2)
f2.close()
如何设置文件的缓冲
以下是代码执行完毕后,内容将直接写入文件,因为写入内容大于缓冲区内容的大小。
f = open('demo.txt', 'w')
f.write('abc')
f.write('+' * 4096)
buffering设置为1,是行缓冲,遇到换行符就会向缓冲区写入内容。
f = open('demo3.txt', 'w', buffering=1)
f.write('abcd')
f.write('1234')
f.write('\n')
buffering设置为10,是不设置缓冲。
如何将文件映射到内存
from mmap import mmap, ACCESS_READ
f = open('demo.txt', 'r')
m = mmap(f.fileno(), 0, access=ACCESS_READ)
print(type(m))
print(m[0])
如何访问文件的状态
from os import stat, lstat
s = stat('aa.wav')
print(s)
print(lstat('aa.wav'))
print(bin(s.st_mode))
from stat import S_IFDIR, S_IRUSR
# print(S_IFDIR(bin(s.st_mode)))
print(s.st_mode & S_IRUSR)
from os.path import isdir,getctime,getsize
print(isdir('aa.wav'))
print(getctime('aa.wav'))
print(getsize('demo.txt'))
如何使用临时文件
from tempfile import TemporaryFile, NamedTemporaryFile
f = TemporaryFile()
f.write('abcdef')
f.seek(0)
print(f.read(100))