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_asciiFalse,另外还要规定文件输出的编码

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()函数的第二个参数改成a

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

 

 

版权声明:
作者:hyzsj0106
链接:https://www.cxywy.com/?p=327
来源:程序员无垠
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录