python入门:文件
python文件处理
- 文件操作分为读、写、修改
1.1 文件的读
示例1:
f = open(file='user_list', mode='r', encoding='utf-8')
data = f.read()
f.close()
print(data)
- file='user_list' #表示文件路径
- mode=‘r’ # 表示只读
- encoding=‘utf-8’ #表示硬盘上的0101010 按照utf-8的规则去“断句”,再将“断句”后的每一段0101010转换成Unicode的01010101,Unicode对照表中有01010101和字符的对应关系
- f.read() 表示读取所有内容,内容是已经转换完毕的字符串
- f.close() 表示关闭文件
示例2:
f = open(file='user_list', mode='rb')
data = f.read()
f.close()
print(data)
- file='user_list' #表示文件路径
- mode=‘rb’ # 表示只读
- f.read() 表示读取所有内容,内容是硬盘上原来以某种编码保存的010101010,即:某种编码格式的字节类型
- f.close() 表示关闭文件
示例2和示例1的区别在哪?
在于示例2打开文件时并未指定encoding,只是为啥?是因为直接以rb模式打开了文件,rb是指二进制模式,数据读到内存里直接是bytes格式,如果想看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码
问:假如不知道要处理的文件是什么编码怎么办呢?
import chardet f = open(file='user_list', mode='rb') data = f.read() f.close() result = chardet.detect(open('user_list', mode='rb').read()) print(result)
循环文件
1.2 写文件
f = open(file='user_list1', mode='w', encoding='utf-8') f.write('lala Du,26,13898424612,Operation,2017-07-02') f.close()
上述操作语法解释:
-
file='user_list1' # 表示文件路径
- mode = ‘w’ # 表示只写
- encoding=‘utf-8’ # 将要写入的Unicode字符串编码成utf-8格式
- f.write(....) # 表示写入内容,写入的内容是Unicode字符串类型,内部会根据encoding转换为指定编码的01101010101,即:字节类型
二进制模式写:wb
1.3 追加
把内容追加到文件尾部
f = open(file='user_list1', mode='a', encoding='gbk') f.write('\nTom,28,13898424613,Operation,2017-07-02') f.close()
注意:
- 文件操作时,以“a”或“ab”模式打开,则只能追加,即:在原来内容的尾部追加内容
- 写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:
ab,写入时需要直接传入以某种编码的0100101,即:字节类型
a和 encoding,写入时需要传入Unicode字符串,内部会根据encoding指定的编码将Unicode字符串转换为编码的010101010
1.4 读写混合模式
f = open(file='user_list1', mode='r+', encoding='gbk') data = f.read() # 可以读内容 print(data) f.write('\nJacke,30,13898424616,Operation,2017-07-02') # 可以写 f.close()
结果:
1.5 修改文件
尝试直接以r+模式打开文件,默认会把新增的内容追加到文件最后面,想要修改中间的内容,怎么办?
可以用seek(中间位置)
f = open(file='user_list1', mode='r+', encoding='utf-8') f.seek(6) f.write("测试工程师") f.close()