一、读写文件
1. 打开文件: open(filename, mode)。 mode有如下几种模式,默认为只读(r)。
2. 写入文件
f = open("/home/test.txt", "w") # f.write(s) 将s写入到文件中, 然后返回写入的字符数。 num = f.write("Come on baby!\n Let‘s go party") print(num) # 如果要写入非字符串的数据, 需要先转换为字符串: value = (‘amy‘, 14, ‘China‘) s = str(value) f.write(s) f.close()
3. 读取文件
f = open("/home/test.txt", "r") str = f.read() # f.read(size) 读取一定数目的数据, 当size被忽略或者为负, 将读取该文件的所有内容。 str = f.readline() # f.readline() 读取一行,换行符为‘\n‘。 当返回一个空字符串, 说明已经读取到最后一行。 str = f.readlines() # f.readlines()读取所有行,如果设置可选参数sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。 print(str) # 迭代文件对象然后读取每行 for line in f: print(line, end=‘‘) f.close()
4. 移动文件位置
f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
f.seek() 改变文件当前的位置, 语法: f.seek(offset, from_what) from_what为0表示从文件开头移动, 1表示当前位置, 2表示文件的结尾,默认为0
seek(x,0) : 从起始位置即文件首行首字符开始移动x个字符
seek(x,1) : 表示从当前位置往后移动x个字符
seek(-x,2):表示从文件的结尾往前移动x个字符
f = open(‘/home/test.txt‘, ‘rb+‘) f.write(b‘0123456789abcdef‘) f.seek(5) # 移动到文件的第六个字节 f.read(1) # b‘5‘ f.seek(-3, 2) # 移动到文件的倒数第三字节 f.read(1) # b‘d‘ f.close()
5. pickle模块 - 对象序列化
a.将数据对象保存到文件
import pickle data1 = {‘a‘: [1, 2.0, 3, 4+6j], ‘b‘: (‘string‘, u‘Unicode string‘), ‘c‘: None} list1 = [1, 2, 3] list1.append(list1) f = open(‘data.pkl‘, ‘wb‘) pickle.dump(data1, f) # 使用 protocol 0 pickle.dump(list1, f, -1) # 使用最高的协议 f.close()
b.从文件中重构python对象