文件操作
文件操作
1.文件路径:有绝对路径和相对路径之分
d:\py_file\你好.txt
2.编码方式:utf-8 gbk .....
3.操作方式:只读,只写,追加,读写,写读
以什么编码方式存储的文件,就以什么编码方式打开
只读:
#绝对路径 f = open('d:\py_file\若依倾天下.txt',mode='r',encoding='utf-8') content = f.read() print(content) f.close() #相对路径,后缀工具自动隐藏了。 f = open('若依若倾',mode='r',encoding='utf-8') content = f.read() print(content) f.close()
#非文字类打开bytes格式,如图片 f = open('若依若倾',mode='rb') content = f.read() print(content,type(content)) f.close() #返回: #b'\xe8\x8b\xa5\xe4\xbe\x9d\xe8\x8b\xa5\xe5\x80\xbehello\r\n\xe4\xbd\xa0\xe4\xbb\xac\xe6\x98\xaf\xe6\x9c\x80\xe6\xa3\x92\xe7\x9a\x84' #Process finished with exit code 0
#w 写 f = open('log',mode='w',encoding='utf-8') f.write('空军和航母') f.close() #写成bytes类型 f = open('log',mode='wb') f.write('老实交代烦死了两款手机发了'.encode('utf-8')) #bytes进行转化成utf-8,转换成什么需要看工具默认的编码方式,不能随便乱写 f.close()
#追加 a,追加在最后一行最后 f = open('log',mode='a',encoding='utf-8') f.write('若依倾天下') f.close() #追加 ab f = open('log',mode='ab') f.write('若依倾天下我'.encode('utf-8')) f.close()
#读写 f = open('log',mode='r+',encoding='utf-8') print(f.read()) f.write('若依倾天下') #print(f.read()) #不会再重复读,只读一次 f.close() #也可只读 f = open('log',mode='r+',encoding='utf-8') print(f.read()) f.close() #写读 从头新写入多少位就占用多少位,超过会覆盖原来的 f = open('log',mode='r+',encoding='utf-8') f.write('aaa') print(f.read()) f.close() #r+b 读写 f = open('log',mode='r+b') print(f.read()) f.write('nnnn'.encode('utf-8')) f.close()
#w+ 都是先清除再写 f = open('log',mode='w+',encoding='utf-8') f.write('aaabbbccc') f.seek(6) #调光标,读的光标位置 print(f.read()) f.close()
#a+ 追加 只是增加了读的功能 f = open('log',mode='a+',encoding='utf-8') f.write('若倾好的') f.seek(0) #只是读的光标 print(f.read()) #如果mode只是a 使用read会报错,a+ 则不会,可加光标进行读 f.close()
#功能详解 f = open('若依倾天下',mode='r+',encoding='utf-8') #content = f.read(3) #只打印前个字符 f.seek(3) #seek按照字节定位光标位置,从第三个字节开始读取三个,一个英文字母一个字节,一个中文三个字节 #断点续传 判断光标位置 print(f.tell()) #告诉光标位置 content = f.read(3) print(content) f.close()
#tell运用
1 f = open('若依倾天下',mode='a+',encoding='utf-8') 2 f.write('若倾') 3 count = f.tell() 4 print(count) 5 f.seek(count - 3) 6 print(f.read()) 7 f.close()
f = open('若依倾天下',mode='r+',encoding='utf-8') line = f.readline() #一行一行读 line = f.readlines() #每一行当成列表中的一个元素,添加到列表 返回 ['若倾倾若倾若倾若倾若倾若倾\n', 'lsjdsa\n', 'lsjfs\n', '零售价方式\n', '蓝色快捷方式\n'] f.truncate(4) #括号为空清空所有,数字4代表保留前四个字节 line = f.read() #打印所有 print(line) for line in f: #for循环打印文件,一行一行 print(line) f.close() #自动关闭close with open('若依倾天下',mode='r+',encoding='utf-8') as obj: print(obj.read()) #同时打开多个 with open('若依倾天下',mode='r+',encoding='utf-8') as f1,\ open('若依若倾',mode='r+',encoding='utf-8') as f2: print(f1.read()) print(f2.read())
username = input("请输入你要注册的用户名") pwd = input("请输入你要注册的密码") with open('list_of_info',mode='w',encoding='utf-8') as f: f.write('{}\n{}'.format(username,pwd)) print("恭喜你注册成功") lis = [] i = 0 while i < 3: i += 1 uname = input("请输入你注册的姓名:") upwd = input("请输入你注册的密码:") with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line) if uname == lis[0].strip() and upwd == lis[1].strip(): print("登陆成功") break else: print("账号密码错误,请重新登陆")
#修改文件方式
1 #修改文件 2 #理论上不能修改 3 with open('若依若倾','r',encoding='utf-8') as f1,open('若依若倾.bak','w',encoding='utf-8') as f2: 4 for line in f1: 5 if 'hello' in line: 6 line = line.replace('hello','iloveyou') 7 print(line) 8 f2.write(line) 9 10 #删除文件,重命名文件 11 import os 12 os.remove('若依若倾') 13 os.rename('若依若倾.bak','若依若倾')