1.读文件
-
读文本文件
""" 1:打开文件 路径:相对路径:file/info.txt 绝对路径:E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt 模式:'rt' 读文本 """ #打开文件 f=open(r'file/info.txt',mode='rt',encoding='utf-8') #读取文件 data=f.read() #关闭文件 f.close()
-
读图片等非文本文件
#读图片,模式需要rb f1=open('file/a1.png',mode='rb') content=f1.read() f1.close()
注意事项:
-
路径
-
相对路径
f=open(r'file/info.txt',mode='rt',encoding='utf-8') data=f.read() f.close()
-
绝对路径
# windows系统路径应该为\\,\会有转义问题 f=open(r'E:\\pycharm_shixun\\模块二\\file\\info.txt',mode='rt',encoding='utf-8') data=f.read() f.close()
-
-
读文件,文件不存在会报错,要判断
-
判断路径是否存在
import os """ 1:打开文件 路径:相对路径:file/info.txt 绝对路径:E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt 模式:'rt' 读文本 """ #读文件,文件不存在会报错,要判断 # windows系统路径应该为\\,\会有转义问题 file_path='E:\\pycharm_shixun\\python数据分析\\模块二函数与模块\\file\\info.txt' exists=os.path.exists(file_path) if exists: f=open(r'file/info.txt',mode='rt',encoding='utf-8') data=f.read() f.close() print(data) else: print('文件不存在')
-
文件不存在,w模式会新建然后再写入内容;文件存在时,w模式会清空文件在写入内容
2. 写文件
-
写文本文件
#写入文件,文件不存在自动创建 f=open('file/t2.txt',mode='wt',encoding='utf-8') f.write('王晓宇') f.close() f2=open('file/t2.txt',mode='wb') f2.write('王晓宇'.encoding('utf-8')) f2.close()
-
写图片等文件
f2=open('file/a2.png',mode='wb') f2.write(content) f2.close()
3.文件打开模式
========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
The default mode is 'rt' (open for reading text).
常见文件打开模式应用:
-
只读:r,rt,rb 【会用】
- 存在,读
- 不存在,报错
-
只写:w,wt,wb 【会用】
- 存在,清空写
- 不存在,创建写
-
只写:a,at,ab【尾部追加写】【会用】
- 存在,尾部追加写
- 不存在,创建写
-
只写:x,xt,xb
- 文件存在,报错
- 文件不存在,创建再写
-
可读可写(+)
-
r+,rt+,rb+,默认光标在起始位置
f=open('file/info.txt',mode='rt+') #先读:读到最后 data=f.read() print(data) #再写,在最后写 f.write('你好') f.close()
f=open('file/info.txt',mode='rt+') #先写:起始位置写,覆盖了原先的值 f.write('你是谁') #再读:先写光标移动,从光标后面读 data=f.read() print(data) f.close()
-
w+,wt+,wb+,默认光标起始位置(清空文件)
f=open('file/info.txt',mode='wt+') data=f.read() print(data) #清空文件,data为空 f.write('你是谁') #移动光标到起始位置 f.seek(0) #读取所有内容 data1=f.read() print(data1) f.close()
-
x+,xt+,xb+,默认光标位置:起始位置(新文件)
-
a+,at+,ab+:默认光标位置:末尾
f=open('file/info.txt',mode='at+') #尾部追加 f.write('你是谁') #移动光标到最前 f.seek(0) #读取所有内容 data=f.read() print(data) f.close()
-
4.常见功能
-
read,读
-
读【常用】
#读文本 f=open(r'file/info.txt',mode='rt',encoding='utf-8') data=f.read() f.close() #读图片,模式需要rb f1=open('file/a1.png',mode='rb') content=f1.read() f1.close()
-
读N个字符(字节)【会用到】
王小雨 #读一个字符 f=open(r'file/info.txt',mode='rt',encoding='utf-8') data=f.read(1) f.close() data 王 wxy #读一个字节 f=open(r'file/info.txt',mode='rb') data=f.read(1) f.close() data w
-
-
readline,读一行
f=open(r'file/info.txt',mode='rt',encoding='utf-8') data=f.readline() f.close()
-
redlines,读所有行,每行作为列表的一个元素
f=open(r'file/info.txt',mode='rt',encoding='utf-8') for line in f.readlines: print(line) #每行 f.close()
-
循环,读大文件【常见】
f=open(r'file/info.txt',mode='rt',encoding='utf-8') for line in f: print(line.strip()) #每行 f.close()
-
write,写
-
flush,刷到硬盘(立即将缓冲区的数据刷到硬盘)
f=open(r'file/info.txt',mode='rt',encoding='utf-8') #不是写到硬盘,而是写到缓冲区,系统会将缓冲区的内容刷到硬盘 f.write('wxy') f.flush() f.close()
#追加用户案例 f=open('file/account.txt',mode='a') while True: user=input('请输入用户名:') if user.upper()=='Q': break pwd=input('请输入密码:') data='{}-{}\n'.format(user,pwd) f.write(data) f.close()
-
移动光标位置(字节)
#移动到指定字节位置 f.seek(3)
注意:在a模式下,调用write在文件中写入内容时,永远只能将内容写到尾部,不会写到光标的位置
-
获取当前光标的位置
f=open('file/info.txt',mode='rb') #tell获取当前游标位置 p1=f.tell() print(p1) #读三个字节,因为模式为b f.read(3) p2=f.tell() print(p2) f.close()
5.上下文管理
with上下文管理,可自动关闭文件【建议使用】
#with打开的文件会自动关闭,防止忘记关闭文件
with open('file/info.txt',mode='r',encoding='utf-8') as f:
data=f.read()
print(data)
注意:python2.7后,可支持多个文件的上下文进行管理
with open('file/info1.txt',mode='r',encoding='utf-8') as f1,open('file/info2.txt',mode='r',encoding='utf-8') as f2:
6. 对不同字符编码的文件处理
- 对不同字符编码的文件创建新的文件
- 统一编码为utf-8
def guess_encoding(file):
with open(file, 'rb') as f:
return chardet.detect(f.read())['encoding']
def convert_to_utf8(file_path, output_file_path):
encoding = guess_encoding(file_path)
with open(file_path, 'r', encoding=encoding, errors='ignore') as file:
content = file.read()
with open(output_file_path, 'w', encoding='utf-8') as output_file:
output_file.write(content)
for i in range(len(data)):
try:
path,name,new_path=data.iloc[i,:]
os.makedirs(new_path,exist_ok=True)
old=os.path.join(path,name)
new=os.path.join(new_path,name)
convert_to_utf8(old, new)
except Exception as e:
continue