文件操作 - 总结
1.f = open(file='D:/**.txt',mode='r',encoding='utf-8')
--------------------------------
1.1.模式:
r 只读 str 需要 encoding 只支持read() rb 只读 bytes 不需要 encoding 只支持read() w 创建 写 str 需要 encoding 只支持write() wb 创建 写 bytes 不需要 encoding 只支持write() 写的str需要encode() a 追加 str 需要 encoding 只支持write() ab 追加 bytes 不需要 encoding 只支持write() 写的str需要encode() 追加的内容之前是什么编码,追加的也要是什么编码,否则会乱码 r+ 读写模式 需要 encoding 支持read()和write() 先读后写,支持往后追加 w+ 写读模式 需要 encoding 支持read()和write() 以写的模式打开 清空 重新创建 一般不用
1.2.文件 f 的方法:
'read', f.read() 全读 f.read(8) 读几个字符 按字符算的 'readable', f.readable() = True / False 判断文件是否可读 'readline', f.readline() 读一整行 f.readline(4) 读一整行的几个字符 遇到\r or \n为止 'readlines', f.readlines() 读所有的行存放在列表中 f.readlines(10) 可以控制展示几行的内容 'write', f.write('*****') 写入 str 清空,创建,在写 / 创建,在写 'writable', f.writable() = True / False 判断文件是否可写 'writelines' f.writelines(list) 可写入列表 'fileno', f.fileno() 返回文件句柄在内核中的索引值 'flush', f.flush() 把文件从内存buffer里强制刷新到硬盘 'seek', f.seek(0) f.seek(0,1) f.seek(3) 把操作文件的光标移动到指定位置 按字节算的 'seekable', f.seekable() = True / False 判断文件是否可进行seek操作 'tell', f.tell() 返回当前文件操作光标位置 按字节算的 'truncate', f.truncate() 需要f.seek(3)配套使用 f.truncate(8) 8个字节后的就截断了 从当前位置往后截断 'close', f.close() 关闭文件 'isatty', f.isatty() = True / False 检测文件是否连接到一个终端设备 'closed', 'newlines', f.newlines 'buffer', f.buffer 'detach', 'encoding', f.encoding 'errors', f.errors 'line_buffering', f.line_buffering 'mode', f.mode 'name', f.name
---------------------------------
2.chardet 用法:
1 import chardet 2 f = open('4.txt','rb') 3 result = chardet.detect(f.read()) 4 {'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}
--------------------------------
3.修改文件不是追加文件
修改文件 - 占硬盘:
1 import os 2 old_str = '我们' 3 new_str = '北京and西安' 4 5 f = open('4.txt', 'r+', encoding='utf-8') 6 f_new = open('5.txt', 'w', encoding='utf-8') 7 for line in f: 8 if old_str in line: 9 line = line.replace(old_str, new_str) 10 f_new.write(line) 11 f.close() 12 f_new.close() 13 os.replace(f_new.name, f.name)
修改文件 - 占内存
1 def save_back_to_file(account_dic): 2 """ 3 把account dic 转成字符串格式 ,写回文件 4 :param account_dic: 5 :return: 6 """ 7 f.seek(0) #回到文件头 8 f.truncate() #清空原文件 9 for k in account_dic: 10 row = ",".join(account_dic[k]) 11 f.write("%s\n"%row) 12 13 f.flush()