文件操作
1. 读 / 写 操作
读取: r (read):只能读不能写,文件不存在就报错
#打开文件: object = open('某txt文件',mode = 'r',encoding = '编码') #读取文件所有内容到内存: content = object.read() print(content) #读取文件的所有内容到内存,并按照每一行进行分割到列表中。 content = object.readlines() print(content) #如果以后读取一个特别大的文件 for line in object: #一行一行进行读取 line = object.strip() #去除换行 print(line) #关闭内容: object.close()
- read(): 全部读到内存
- read(1)
1表示一个字符 obj = open('某个txt文件',mode='r',encoding='utf-8') data = obj.read(1) # 1个字符 obj.close() print(data) 1表示一个字节(二进制中) obj = open('某个txt文件',mode='rb') # b:二进制的意思 data = obj.read(3) # 1个字节 obj.close()
写入:w (write): 只能写不能读(先清空文件),文件不存在就新建
#打开文件: object = open('某个txt文件或要新建的文件',mode = 'w',encoding = '编码') #写内容: object.write('xxx') #关闭文件: object.close()
write(字符串) obj = open('某个txt文件或要新建的文件',mode='w',encoding='utf-8') obj.write('你好') obj.close() write(二进制) obj = open('某个txt文件或要新建的文件',mode='wb') # obj.write('你好'.encode('utf-8')) v = '你好'.encode('utf-8') obj.write(v) obj.close()追加; a (append): 只能追加不能读,不存在则新建
#打开文件: object = open ('某个txt文件或要新建的文件',mode = 'a',encoding = '编码') #写内容: object.append() #关闭文件 object.close()
2. 其他操作:seek / tell / flush
seek(光标字节位置),无论模式是否带b,都是按照字节进行处理。
obj = open('某个txt文件',mode='r',encoding='utf-8') obj.seek(3) # 跳转到指定字节位置,读取后面内容 data = obj.read() obj.close() print(data) obj = open('a.txt',mode='rb') obj.seek(3) # 跳转到指定字节位置 data = obj.read() obj.close() print(data)
tell(), 获取光标当前所在的字节位置
obj = open('a.txt',mode='rb') obj.read() data = obj.tell() print(data) obj.close()
flush,强制将内存中的数据写入到硬盘
v = open('a.txt',mode='a',encoding='utf-8') while True: val = input('请输入:') v.write(val) v.flush() v.close()
3 . 关闭文件
# 方式一 v = open('a.txt',mode='a',encoding='utf-8') v.close() # 方式二 with open('a.txt',mode='a',encoding='utf-8') as v: data = v.read() # 缩进中的代码执行完毕后,自动关闭文件
4 .文件内容的修改
# 小文件修改 with open('a.txt',mode='r',encoding='utf-8') as f1: data = f1.read() new_data = data.replace('xxx','666') with open('a.txt',mode='w',encoding='utf-8') as f1: data = f1.write(new_data) # 大文件修改 f1 = open('a.txt',mode='r',encoding='utf-8') f2 = open('b.txt',mode='w',encoding='utf-8') #先打开两个文件,再进行操作 for line in f1: # 一行一行进行修改 new_line = line.replace('要被修改的内容','被修改后的内容') f2.write(new_line) f1.close() f2.close() #另一种写法: with open('a.txt',mode='r',encoding='utf-8') as f1, open('c.txt',mode='w',encoding='utf-8') as f2: for line in f1: new_line = line.replace('要被修改的内容','被修改后的内容') f2.write(new_line)
三.练习:
1.请将user中的元素根据 _ 链接,并写入 ‘a1.txt’ 的文件
user = ['alex','eric'] data = '_'.join(user) object = open('a1.txt',mode = 'w',encoding = 'utf-8') object.write(data) object.close()
2.请将user中的元素根据 | 链接,并写入 ‘a2.txt’ 的文件
user = [ {'name':'alex','pwd':'123'}, {'name':'eric','pwd':'olbody'},] object = open('a2.txt',mode = 'w',encoding = 'utf-8') for item in user: line = '%s|%s\n' %(item['name'],item['pwd']) object.write(line) object.close()
3.请将a2.(根据2)txt中的文件读取出来并添加到一个列表中 [‘alex|123′,’eric|olbody’]
方法一: list = [] objecct = open('a2.txt',mode = 'r',encoding = 'utf-8') for line in object: line = line.strip() list.append(line) print(list) 方法二: file_obj = open('a2.txt',mode='r',encoding='utf-8') content = file_obj.read() file_obj.close() content = content.strip() #去除最后一个换行 data_list = content.split('\n') #根据中间的换行进行切割 print(data_list)