上一章讲完了文件的打开和关闭,现在我们讲讲怎么操作文件。由于我们较多直接处理的是文本文件,而二进制文件很少进行直接操作,通常用一些第三方库或函数进行间接处理,因此我们的讲解主要围绕文本文件举例说明。一、获取文件的内容
假设有一个“test.txt”文件,其中的内容为:
Hello!I want to learn Python.
我们可以使用read、readline、readlines等函数来读取其中的内容:
# 按照字节数读取内容print(fp.read(10)) # Output: Hello!\nI w# 读取一整行内容,包括换行符 \nprint(fp.readline()) # Output: Hello!\n# 读取所有行,包括 \nprint(fp.readlines()) # Output: ['Hello!\n', 'I want to learn Python.']
注意,读取的操作会伴随文件指针的移动。例如我们按照字节去调用,得到的输出将会是:
print(fp.read(5)) # Output: Helloprint(fp.read(5)) # Output: !\nI w
第一次读取了5个字节,文件指针来到了第6个字节处,此时再读取5个字节,则获取到的就是第6至第10个字节。同样的情况也适用于readline。
二、写入内容到文件
使用write和writelines可以实现把字符串内容写入到文件当中。例如:
fp = open("./test.txt", "w", encoding="utf-8")fp.write("Hello!\nI want to learn Python!")fp.writelines(["Hello!\n", "I want to learn Python!"])
注意,写操作时,程序不会在行末尾自动添加换行符“\n”,需手动写入。
上一章我们提到,调用close可以让程序将内容从内存写到磁盘,否则就需等到程序终止。若要提前把数据保存出来,我们可以使用flush函数,刷新文件内部缓冲,把数据立刻写入文件, 而不是被动的等待:
三、读取CSV文件
(1)CSV文件
CSV(Comma-Separated Values,逗号分隔值)是一种简单的文本文件格式,用于存储表格数据。CSV文件中的每一行代表一个数据记录,使用逗号“,”分隔。CSV文件通常用于数据交换,几乎所有的电子表格软件(如Excel)和数据库系统都能读取和写入CSV文件。
如下即为一个CSV文件(文件名为example.csv)内容的示例:
和普通表格一样,首行可以是表头。CSV是文本文件,可以使用常规文本编辑软件打开,上图即使用代码编写软件打开后的样式。
(2)CSV模块
Python提供了多种方法来读取CSV文件,最常用的是标准库中的csv模块和第三方库pandas,我们主要介绍csv模块。csv模块是Python的标准库,无需额外安装。它提供了读取和写入CSV文件的功能。
读取CSV文件,注意打开文件后,需使用csv模块生成一个专门的读取器,便于做文件内容的解析:
import csv# 打开 CSV 文件with open('example.csv', mode='r', encoding='utf-8') as file: # 创建 CSV 读取器 csv_reader = csv.reader(file) # 读取表头 header = next(csv_reader) print(f"表头: {header}") # 逐行读取数据 for row in csv_reader: print(row)# Output:# ['姓名', '年龄', '城市']# ['张三', '25', '北京']# ['李四', '30', '上海']# ['王五', '22', '广州']
写入CSV文件:
import csv# 数据data = [ ["姓名", "年龄", "城市"], ["张三", 25, "北京"], ["李四", 30, "上海"], ["王五", 22, "广州"]]# 打开 CSV 文件withopen('output.csv', mode='w', encoding='utf-8', newline='') asfile: # 创建 CSV 写入器 csv_writer = csv.writer(file) # 写入数据 for row in data: csv_writer.writerow(row)
会发现,CSV文件有时会添加表头,而每次读取或写入时,做到表头和数据的对应需要额外的代码。此时,我们可以使用字典读取和字典写入,来简化这些操作。
字典读取:
import csv# 打开 CSV 文件with open('example.csv', mode='r', encoding='utf-8') as file: # 创建字典读取器 csv_reader = csv.DictReader(file) # 逐行读取数据 for row in csv_reader: print(row)# Output:# {'姓名': '张三', '年龄': '25', '城市': '北京'}# {'姓名': '李四', '年龄': '30', '城市': '上海'}# {'姓名': '王五', '年龄': '22', '城市': '广州'}
字典写入:
import csv# 数据data = [ {"姓名": "张三", "年龄": 25, "城市": "北京"}, {"姓名": "李四", "年龄": 30, "城市": "上海"}, {"姓名": "王五", "年龄": 22, "城市": "广州"}]# 打开 CSV 文件withopen('output.csv', mode='w', encoding='utf-8', newline='') asfile: # 创建字典写入器 fieldnames = ["姓名", "年龄", "城市"] # 表头 csv_writer = csv.DictWriter(file, fieldnames=fieldnames) # 写入表头 csv_writer.writeheader() # 写入数据 for row in data: csv_writer.writerow(row)
写入完成后,output.csv文件中的内容即为:
往期回顾:
Python可视化Seaborn全攻略 | Part.7
Python可视化Seaborn全攻略 | Part.6
Python学习笔记——从入门到报废(二十、文件(上))
Python可视化Seaborn全攻略 | Part.5