目录
一、普通文件读写
二、with上下文
三、二进制文件读写
四、csv文件读写
在 Python 中,文件的读写是一项重要的操作。以下是关于 Python 文件读写的详细介绍:
绝对路径:从盘符开始的路径, 如:d:\Desktop\coding\Code\aaa\f1.txt
因为路径中有特殊字符,为了保留字符原本的含义,建议使用r'xxx'表示路径的字符串
path1 = r'd:\Desktop\coding\Code\Day25Code\a\f1.txt'
print(path1)
相对路径:相对于当前工程和当前py文件,如:aaa/f1.txt
情况一:如果当前py文件和txt文件平级,则可以直接书写txt文件名称
情况二:如果当前py文件和txt文件的上级目录平级,则需要从上级目录开始书写
情况三:如果py文件的上级目录和txt文件平级,则需要回退路径
f1 = open(r'..\f1.txt')
f2 = open(r'..\..\t1.txt')
文件读取语法结构:open(file,mode,encoding)
mode:打开文件的模式
open打开模式 | 描述 |
'r' | 只读模式,文件必须存在,否则会报错。 |
'w' | 只写模式,若文件存在则清空内容,若文件不存在则创建新文件。 |
'a' | 追加模式,若文件存在则在文件末尾追加内容,若文件不存在则创建新文件。 |
'x' | 创建新文件,若文件已存在则报错。 |
'b' | 二进制模式,可以与其他模式结合使用,如 'rb'、'wb' 等。 |
t' | 文本模式(默认),可以与其他模式结合使用,如 'rt'、'wt' 等。 |
+' | 可读可写模式,可与其他模式结合使用,如 'r+'、'w+' 等。 |
encoding:编码格式以字符串的方式表示,只要是Python支持的编码格式,都可以使用,默认编码格式由当前使用的平台决定。常用的编码格式:utf-8 、gbk
第一步:打开文件
# 注意1:在读取文件的时候,encoding的值一定要和被读取的文件的编码格式保持一致,否则因为无法解码而导致报错
# 注意2:encoding一定要用关键字参数表示
# 注意3:当open函数执行完毕,会得到一个被打开的文件对象,也被称为文件描述符,后续的操作都由文件描述符执行
f1 = open(r'aaa/致橡树.txt','r',encoding='gbk')
第二步:读取内容
# a.read():一次性读取全部内容
# r1 = f1.read()
# print(r1)
# read(n):一次读取n个字符
# r11 = f1.read(3)
# print(r11)
# b.readline():一次读取一行内容,以换行符作为分割的依据
# r2 = f1.readline()
# print(r2)
# c.readlines():一次全部读取完毕,但是返回一个列表,列表中的元素是每行内容
r3 = f1.readlines()
print(r3)
# 如果读取到的数据没有达到预期的效果,需要手动处理
for line in r3:
new_line = line.rstrip('\n').lstrip('\u3000').lstrip()
print(new_line)
第三步:关闭文件
# 为了节约内存空间,当文件读写完毕之后,手动将文件关闭,释放占用的资源
f1.close()
第一步:打开文件
# 注意1:如果打开模式采用的是w或a,则表示打开文件用于写入,此时文件可以不存在,会自动生成
# 注意2:如果打开模式使用的是w,则可以达到覆盖的目的
# 注意3:如果打开模式使用的是a,则在原内容的基础上进行追加
f1 = open(r'aaa/a1.txt','w',encoding='utf-8')
f2 = open(r'aaa/a1.txt','a',encoding='utf-8')
第二步:写入内容
f.write(字符串)
f2.write('轻轻的我走了~~~')
# 刷新,提高写入的效率
f2.flush()
第三步:关闭文件
f2.close()
在文件读写中with语法结构如下:
with open() as f:
读/写
说明:
a.with上下文管理器一般用于简化代码,如:文件读写,数据库操作等
b.使用with上下文管理器进行文件的读写之后,无需手动关闭文件,当with代码块执行完毕,对应的文件会自动关闭
c.变量表示文件描述符,也就是打开的文件对象
d.当通过with的方式打开文件,则文件读取和写入的操作一定要在with代码块中完成,否则文件会被关闭导致无法操作
with open(r'aaa/致橡树.txt','r',encoding='gbk') as f1:
r = f1.read()
print(r)
with open(r'aaa/a1.txt','a',encoding='gbk') as f2:
f2.write('32345674123456789')
f2.flush()
二进制文件:图片,音视频,压缩包等
注意:a.读取和写入二进制文件需要使用rb和wb
'rb' 打开二进制文件用于读取
'wb' 打开二进制文件用于写入
b.因为二进制文件是由二进制【字节】组成,没有编码一说,所以需要省略encoding参数,如果设置encoding,报错ValueError: binary mode doesn't take an encoding argument
with open(r'aaa/3.png','rb') as f1:
r = f1.read()
print(r)
with open(r'aaa/img.png','wb') as f2:
f2.write(r) # f2.write(字节)
f2.flush()
.csv是一种文件格式(如.txt、.doc等),也可理解.csv文件就是一种特殊格式的纯文本文件。即是一组字符序列,字符之间用英文字符的逗号或制表符(Tab)分隔,所以,CSV文件本身就是是个纯文本文件,这种文件格式经常用来作为不同程序之间的数据交互的格式。
(1)读取csv文件
with open(r'aaa/b1.csv','r',encoding='utf-8') as f1:
# reader(iterable)----->iterator
reader = csv.reader(f1)
# for row in reader:
# print(row)
datalist = list(reader)
print(datalist)
(2)写入csv文件
# 方式一:通过遍历的方式,逐行写入
# for data in datalist:
# writer.writerow(data)
# 方式二:一次性写入多行
writer.writerows(datalist)