Python的文件操作
在python中,我们想打开或写入一份文件,是通过调用open
TXT
open()
方法用于打开一个文件,并返回文件对象,如果该文件无法被打开,会抛出 OSError
file = open(filepath, mode='r', encoding=None)
file.close() # 关闭文件。关闭后文件不能再进行读写操作。
file.flush() # 刷新文件缓冲,将内部缓冲区的数据立刻写入文件
file.readline() # 读取整行,包括 "\n" 字符。
file.readlines() # 读取所有行并返回列表
file.seek(offset[, whence]) # 移动文件读取指针到指定位置
file.truncate([size]) # 从文件的首行首字符开始截断,截断文件为size个字符
file.write(str) # 将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence) # 向文件写入一个序列字符串列表
read、readline、readlines
总结:
read:直接将整个文件加载到内存
readline:读取一行内容
readlines:将整个文件加载进内存,并将每一行单独存放,返回列表
# 读取一行
f = open('test.txt', 'r+', encoding='utf-8')
print("读取一行 ====")
line = f.readline()
while line:
# 打印当前文件指针的位置
print("文件指针:", f.tell())
print("行内容:", line)
# 每次都需要调用,重新赋值,否则会造成死循环
line = f.readline()
JSON
格式:
[{
"name": "Bob",
"gender": "male",
"birthday": "1992-10-18"
}, {
"name": "Selina",
"gender": "female",
"birthday": "1995-10-18"
}]
JSON可以由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。
Python基础库中的json库可以实现json数据处理
json.loads()
将json字符串转换为可执行的类型 str
json.dumps()
将python中的字典类型转换为字符串类型 str
json.load()
从文件中读取json字符串 文件
json.dump()
将json格式字符串写到文件中 文件
注意:
JSON的数据需要用双引号来包围,不能使用单引号
如果想保存JSON的格式,可以再加一个参数indent
,代表缩进字符个数。
with open('data.json', 'w') as file:
file.write(json.dumps(data, indent=2))
这样得到的内容会自动带缩进,格式会更加清晰。
有时为了输出中文,还需要指定参数ensure_ascii
为False
,另外还要规定文件输出的编码
with open('data.json', 'w', encoding='utf-8') as file:
file.write(json.dumps(data, indent=2, ensure_ascii=False))
CSV
写入csv文件
import csv
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])
writer.writerow(['10002', 'Bob', 22])
writer.writerow(['10003', 'Jordan', 21])
首先,打开data.csv文件,然后指定打开的模式为w
(即写入),获得文件句柄,
随后调用csv库的writer()
方法初始化写入对象,传入该句柄,
然后调用writerow()
方法传入每行的数据即可完成写入。
newline=''
是为了不添加空白行
运行结束后,会生成一个名为data.csv的文件,此时数据就成功写入了。
如果想修改列与列之间的分隔符(默认逗号)
,可以在 csv.writer 中传入 delimiter=' '
在初始化写入对象时传入delimiter
为空格,此时输出结果的每一列就是以空格分隔了
另外,我们也可以调用writerows()
方法同时写入多行,此时参数就需要为二维列表,例如:
import csv
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerows([['10001', 'Mike', 20],
['10002', 'Bob', 22],
['10003', 'Jordan', 21]])
但是一般情况下,爬虫爬取的都是结构化数据,我们一般会用字典来表示。
在csv库中也提供了字典的写入方式,示例如下:
import csv
with open('data.csv', 'w', newline='') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})
结果是一样的:
open()
函数的第二个参数改成
import csv
with open('data.csv', 'a', newline='') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'id': '10004', 'name': 'Durant', 'age': 22})
另外,如果接触过pandas等库的话,可以调用DataFrame
对象的to_csv()
方法来将数据写入CSV文件中。
尝试用pandas来读取数据
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
---------Output:---------
id name age
0 10001 Mike 20
1 10002 Bob 22
2 10003 Jordan 21
3 10004 Durant 22
共有 0 条评论