1.简介
读写文件是常见的IO操作,python内置了读写文本的函数。
读写文件的模式描述如下:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2.读取文件
文本信息如下:
2.1读取文件的基本信息
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 # 读取文件信息 4 print "文件名: ", f.name 5 print "是否已关闭 : ", f.closed 6 print "访问模式 : ", f.mode 7 print "末尾是否强制加空格 : ", f.softspace 8 # 关闭文件 9 f.close()
2.2一次性读取
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 # 一次性读取全部内容,不安全 4 print '一次性全部读取: ', f.read() 5 f.close()
2.3多次读取
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 # 文件长度 4 # print '文件长度:', len(f.read()) 5 # 从文件的开头读取13个字节,超过文本长度则读取全部 6 print '第一次读取: ', f.read(13) 7 # 继续读取4个字节 8 print '第二次读取: ', f.read(4) 9 f.close()
2.4按行读取
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 # 分行读取 4 print '读取第一行: ', f.readline().strip() 5 print '读取第二行的4个字节: ', f.readline(4) 6 f.close()
2.5file作为迭代器
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 for index in range(3): 4 # file自身作为迭代器 5 line = f.next() 6 print line.strip()
2.6按行读取并存为list
1 # 只读方式打开文本文件 2 f = open('./readout.txt', 'r') 3 # 一次性读取所有行并且返回list 4 fileList = f.readlines() 5 # ['line one ', 'line two ', 'xe4xb8xadxe6x96x87xe6xb5x8bxe8xafx95'] 6 print 'List列表: ', fileList 7 for line in fileList: 8 # #去掉每行头尾空白 9 print line.strip() 10 f.close()
2.7读取二进制文件
1 # 打开二进制文件,例如图片、视频 2 f = open('./readpicture.jpg', 'rb') 3 print f.read() 4 f.close()
3.写入文件
3.1写入文件的基本信息
1 # 只写方式打开文件,写入文本 2 f = open('./writein.txt', 'w') 3 # 读取文件信息 4 print "文件名: ", f.name 5 print "是否已关闭 : ", f.closed 6 print "访问模式 : ", f.mode 7 print "末尾是否强制加空格 : ", f.softspace 8 # 关闭文件 9 f.close()
3.2多种写入
1 # 只写方式打开文件,写入文本 2 f = open('./writein.txt', 'w') 3 # 写入文本 4 f.write('line one') 5 f.close() 6 7 # 只写方式打开文件,以序列方式写入 8 f = open('./writein.txt', 'w') 9 contentList = ['line one ', 'line two ', '中文测试 '] 10 # 写入序列 11 f.writelines(contentList) 12 f.close()
4.其他函数 file.tell() 、file.seek(offset,[],whence)
1 # 以读写方式打开文件,以序列方式写入 2 f = open('./writein.txt', 'w+') 3 contentList = ['line one ', 'line two ', '中文测试 '] 4 # 写入序列 5 f.writelines(contentList) 6 # 指针位置:file.tell() 7 print '写入后指针所在位置:', f.tell() 8 # 指针偏移:file.seek(offset[, whence]) 9 # 前者为偏移量,后者为指针位置(默认0表示初始位置,1表示当前位置,2表示末尾位置) 10 f.seek(0) 11 print '偏移后指针所在位置:', f.tell() 12 print '数据: ', f.read() 13 f.close()
5.使用with语句配合IO操作
1 with open('/path/to/file', 'r') as f: 2 print f.read()
注:该种方式可以自动调用close()方法,避免出错!!!