Python基础 之 文件操作
程序员文章站
2024-01-05 20:22:52
文件操作 一、路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二、编码方式 utf-8 gbk... 三、操作方式 1.只读 r 和 rb 2.只写 w 和 wb 3.追加内容 a 和 a+ ***** 4.读写 r+ 和 r+b 5.写读 w+ 和 w+b ......
文件操作
一、路径
文件绝对路径:d:\python.txt
文件相对路径:在IDEA左边的文件夹中
二、编码方式
utf-8 gbk...
三、操作方式
1.只读
r 和 rb
绝对路径的打开操作 f = open('d:\even.txt',mode='r',encoding='UTF-8') content = f.read() print(content) f.close() #test #简单的文件操作示例 在idea文件夹中打开操作 f = open('even',mode='r',encoding='UTF-8') content = f.read() print(content) f.close() f = open('even',mode='rb') #以rb方式打开,后面则不用再跟encoding='UTF-8' content = f.read() print(content) f.close() #b'idea\xe4\xb8\xad\xe7\x9a\x84\xe7\xa4\xba\xe4\xbe\x8b'
*** 以什么编码方式储存的文件,就以什么编码打开进行操作。
2.只写
w 和 wb
#对于w,没有此文件就会创建文件 f = open('log',mode='w',encoding='utf-8') #log为创建的文件名 f.write('创建测试') #创建文件要写入的的内容 f.close()
3.追加内容
a 和 a+
#a f = open('log',mode='a',encoding='utf-8') #log为需要追加的文件名 f.write('佳琪') #追加要写入的的内容 f.close() #a+ f = open('log',mode='a+',encoding='utf-8') f.write('77777') f.seek(0) print(f.read()) f.close()
***** 4.读写
r+ 和 r+b
f = open('log',mode='r+',encoding='utf-8') print(f.read()) #先读 f.write('大,小') #后写 f.close() #如果在r+的模式下先写后读,会将此次写入的字符从这个文件开始进行覆盖写入 f = open('log',mode='r+',encoding='utf-8') f.write('大,小') #先写 print(f.read()) #后读 f.close()
5.写读
w+ 和 w+b
f = open('log',mode='w+',encoding='utf-8') f.write('66666') #先写 f.seek(0) #调整光标位置至开始 print(f.read()) #后读 f.close() #66666
*** 文件操作之后 一定要加.close()
如果不加。可能未写入磁盘,导致文件部分丢失。
因为操作完,数据大多在内存里。
例如把word写上十几页后,直接把电脑关闭了。
*****最常用的
r+
四、文件操作功能详解
1.seek 和 tell
seek:按照字节定光标的位置
tell:告诉你光标的位置
obj = open('log',mode='r+',encoding='utf-8') content = f.read(3) # 读前3个字符 f.seek(3) # 按照字节定光标的位置 f.tell() # 告诉你光标的位置 print(f.tell()) content = f.read() print(content)
2.readline 和 readlines
line = f.readline() # 一行一行的读 line = f.readlines() # 每一行当成列表中的一个元素,添加到list中
3.readable
f.readable() # 是否可读
4.打开多个
with open('log',mode='r+',encoding='utf-8') as obj: print(obj.read()) #f.close() 该格式可不写f.close(),自动关闭 #可以打开多个,且末尾不用加close with open('log',mode='r+',encoding='utf-8') as f1,\ open('log',mode='r+',encoding='utf-8') as f2: print(f1.read()) print(f2.read())
5.删除和重命名
修改文件的本质是先创建一个文件的bak然后进行修改,再删除源文件,再将bak文件重命名为源文件名
with open('even',encoding='utf-8') as f,open('even.bak','w',encoding='utf-8') as f2: for line in f: if '苹果' in line: #even中的内容:苹果 line = line.replace('苹果','梨子') #写文件 f2.write(line)
import os os.remove('even') #删除文件 os.rename('even.bak','even') #重命名文件 将even.bak重命名为even
五、练习
注册和登录
username = input('请输入你要注册的用户名>>>') password = input('请输入你要注册的密码>>>') with open('list_of_info',mode='w',encoding='utf-8') as f: #跟上面绿色注释的代码等效,末尾不用加close() f.write('{}\n{}'.format(username,password))
print('恭喜您,注册成功')
lis = [] i = 0 while i < 3: usn = input('请输入你的用户名:') pwd = input('请输入你的密码:')
with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line)
if usn == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else:print('账号或密码错误') i+=1
username = input('请输入你要注册的用户名>>>') password = input('请输入你要注册的密码>>>') f = open('list_of_info2',mode='w',encoding='utf-8') f.write('{}\n{}'.format(username,password)) f.close() # with open('list_of_info',mode='w',encoding='utf-8') as f: #跟上面代码等效,末尾不用加close() # f.write('{}\n{}'.format(username,password)) print('恭喜您,注册成功') lis = [] #定义一个空的list类lis i = 0 #定义一个变量i为0,作为次数限制 while i < 3: #定义一个while循环 i < 3来限制错误次数 usn = input('请输入你的用户名:') #重新定义新的input输入变量usn用来进行登录 pwd = input('请输入你的密码:') #重新定义新的input输入变量pwd用来进行登录 f1 = open('list_of_info2', mode='r+', encoding='utf-8') f.close() #with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: #f1进行for循环并用line表示 lis.append(line) #将line添加至之前定义的空lis中 if usn == lis[0].strip() and pwd == lis[1].strip(): #如果用户名和密码都能对应 则登录成功 print('登录成功') break else:print('账号和密码错误') i+=1