文件操作
文件操作 & 编码
一:文件操作
python.txt文件
1, 文件路径:d:\python.txt (绝对路径)
绝对路径:从根目录开始
相对路径:从当前位置开始
2. 编码方式:UTF-8 GBK等
3. 操作方式:只读,只写,追加,读写,写读
如:简单文件读取
绝对路径:
f = open('d:\python.txt',mode = 'r',encoding = 'UTF_8')
content = f.read()
print(content)
f.close()
相对路径:(在同一个文件夹里)
f = open('python.txt',mode = 'r',encoding = 'UTF_8')
content = f.read()
print(content)
f.close()
注意:以什么方式储存的文件就要以什么方式打开
操作:
①只读;mode = 'r' 或者 mode = ‘ rb’
(r是以str的方式读出来;rb十一bytes方式读出来)(没有encoding)
rb的作用:打开图片,视频,写入,存入,上传下载都用rb
②只写:mode = 'w' 或者 mode = ‘ wb’
w :对于只写,没有此文件,就会创建,若有此文件先删除源文件的内容再写
f = open('文件名',mode = 'w',encoding = 'UTF_8')
f.write('内容')
f.close()
wb :以bytes写入,但显示出来得转化为UTf-8
f = open('文件名',mode = 'wb')
f.write('内容'.encode(UTF-8))
f.close()
③追加:mode = 'a' 或者mode = ' ab'
原理:光标自动再原内容的末尾
a:f = open('文件名',mode = 'a',encoding = 'UTF_8')
f.write('需要追加的内容')
f.close()
ab:f = open('文件名',mode = 'ab')
f.write('内容'.encode(UTF-8))
f.close()
④读写:mode = 'r+' 或者mode = ' r+b'
如果在mode=‘r+’的模式下先写后读,则写入多少位从头开始占原来内容多少位。
读出来的是原来的没有被占的内容。
f = open('文件名',mode='rb',encoding='UTF-8')
print(f.read())
f.write('加油')
f.close()
⑤写读:mode = 'w+' 先把原文件内容删除,再写入,与‘w’的区别是‘w+’加上print(f.read())不会报错
功能详解:
f.read() #read读出来的都是字符,可选择读几个字符,如f.read(3)读前三个字符 f.seek() #按照字节定光标的位置;一个中文为三个字节;如f.seek(3)光标再第一个中文字符之后 f.tell() #告诉你光标的位置 f.readable() #是否可读,返回true或者false f.readline() #一行一行的读; f.readlines() #每一行当成列表中的元素,增加到列表中 f.truncate() #截取原文件的内容
补充:
①for line in f:
print(line)把f中的内容都读出来
②f = open('文件名',mode = 'r+',encoding='utf-8')
f.close()的另一种写法
with open('文件名',mode = 'r+',encoding='utf-8') as f:
print(f.read())
用with的好处:自动关闭,不用写close();也可以同时打开多个文件
如:
with open('文件名',mode = 'r+',encoding='utf-8') as f,\
with open('文件名',mode = 'w',encoding='utf-8') as f1:
相关操作
为啥要有文件处理:数据从内存到硬盘的过程
登陆注册:
要求:①注册②注册的用户名和密码写入到文件③登录时从文件取出用户名和密码来匹配输入的用户名和密码
④若匹配失败,有三次机会
username = input('请输入注册的用户名:')
password = input('请输入注册的密码:')
with open('登陆注册信息文件',mode = 'w',encoding = 'UTF-8') as f:
f.write('{}\n{}'.format(username,password))
print('恭喜你,注册成功!')
lis = []
i = 0
while i < 3:
i += 1
uname = input('请输入用户名:')
pword = input('请输入密码:')
with open('登陆注册信息文件', mode='r', encoding='UTF-8') as f1:
for line in f1:
lis.append(line)
if uname == lis[0].strip() and pword == lis[1]:
print('登陆成功')
else:
print('账号或者密码错误')
修改文件:
文件不能修改,若非得修改,用replace,删除文件,重命名文件(实际是新文件替换旧文件)
with open('旧文件',encoding = 'utf-8') as f,\
with open('旧文件.bak',mode = 'w',encoding = 'utf-8') as f1:
for line in f:
if '要修改的内容' in line:
line = line.replace('要修改的内容','新内容')
f1.write(line) #写文件
import os
os.remove('旧文件') #删除文件
os.rename('旧文件.bak','旧文件') #重命名

浙公网安备 33010602011771号