

◾ 编程语言:.NET/Java/Python/Go/Node...
◾ 移动生态:HarmonyOS/iOS/Android/小程序
◾ 前沿领域:物联网/网络安全/大数据/AI/元宇宙
◾ 游戏开发:Unity3D引擎深度解析
在网络爬虫的开发过程中,数据的存取是一个至关重要的环节。无论是从网页抓取来的文本、图片,还是其他格式的数据,如何高效、准确地存储和读取这些信息,直接关系到爬虫的性能和后续数据分析的效果。在《Python网络爬虫从入门到精通》的第037篇文章中,我们将深入探讨文件的存取方法,帮助你在爬虫项目中灵活运用这些技巧。
本篇文章将涵盖文件的基本读写操作,包括如何使用Python的内置函数以及流行的第三方库来处理各类文件格式,如文本文件、CSV文件和JSON文件等。通过具体的实例,我们将演示如何将抓取的数据有效地保存到文件中,以及如何从文件中读取数据进行进一步处理。这些技能不仅能提升你在爬虫项目中的开发效率,还能帮助你更好地管理和利用数据。
file = open(filename, mode='r', buffering=-1)参数 | 说明 | 常用值 |
|---|---|---|
| 文件路径(相对/绝对) | "data.txt" |
| 文件访问模式 | r/w/a/r+/rb等 |
| 缓冲策略(0=无缓冲,1=行缓冲,>1=缓冲区大小) | 默认系统缓冲设置 |
模式 | 说明 | 适用场景 |
|---|---|---|
| 只读模式(默认) | 读取现有文件 |
| 写入模式(覆盖原有内容) | 创建新文件/清空重写 |
| 追加模式(在文件末尾添加) | 日志文件记录 |
| 读写模式(指针在开头) | 需要同时读写操作 |
| 二进制只读 | 处理非文本文件 |
| 二进制写入 | 保存图片/视频 |
import requests # 导入网络请求模块
from bs4 import BeautifulSoup # html解析库
url = 'http://quotes.toscrape.com/tag/inspirational/' # 定义请求地址
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
response = requests.get(url,headers) # 发送网络请求
if response.status_code==200: # 如果请求成功
#创建一个BeautifulSoup对象,获取页面正文
soup = BeautifulSoup(response.text, features="lxml")
text_all = soup.find_all('span',class_='text') # 获取所有显示励志名句的span标签
txt_file = open('data.txt','w',encoding='utf-8') # 创建open对象
for i,value in enumerate(text_all): # 循环遍历爬取内容
txt_file.write(str(i)+value.text+'\n') # 写入每条爬取的励志名句并在结尾换行
txt_file.close() # 关闭文件操作输出文件示例:

with open('message.txt', 'r', encoding='utf-8') as f:
content = f.read(9) # 读取前9个字符
print(content) # 输出:Python的强with open('message.txt', 'r', encoding='utf-8') as f:
f.seek(11) # 跳过前11个字节(汉字占2字节)
part = f.read(8) # 读取后续8字符
print(part) # 输出:大到你无法字符计算规则:
print("\n","="*20,"Python经典应用","="*20,"\n")
with open('message.txt','r') as file: # 打开保存Python经典应用信息的文件
number = 0 # 记录行号
while True:
number += 1
line = file.readline()
if line =='':
break # 跳出循环
print(number,line,end= "\n") # 输出一行内容
print("\n","="*20,"over","="*20,"\n")输出示例:

print("\n","="*20,"Python经典应用","="*20,"\n")
with open('message.txt','r') as file: # 打开保存Python经典应用信息的文件
message = file.readlines() # 读取全部信息
print(message) # 输出信息
print("\n","="*25,"over","="*25,"\n")
with语句自动管理文件开关,避免资源泄漏方法 | 10MB文件 | 1GB文件 | 内存占用 |
|---|---|---|---|
| 0.02s | 2.1s | 高 |
| 0.15s | 15.3s | 低 |
| 0.03s | 2.4s | 高 |
生成器逐行 | 0.18s | 18.2s | 极低 |
优化建议:大文件优先使用迭代器逐行处理
with open('big_data.txt') as f:
for line in f: # 内存友好的逐行读取
process(line)import csv
# TXT转CSV
with open('data.txt', 'r') as txt_file, open('data.csv', 'w') as csv_file:
writer = csv.writer(csv_file)
for line in txt_file:
writer.writerow([line.strip()]):DataFrame.to_csv()df.to_csv(
path_or_buf=None, # 文件路径/缓冲区对象
sep=',', # 分隔符(默认逗号)
na_rep='', # 缺失值占位符
float_format=None, # 浮点数格式(如"%.2f")
columns=None, # 指定存储列
header=True, # 是否包含列名
index=True, # 是否保留行索引
mode='w', # 写入模式('w'覆盖/'a'追加)
encoding=None, # 文件编码(推荐'utf-8-sig')
line_terminator='\n'# 换行符
)参数 | 说明 | 示例值 |
|---|---|---|
| 文件路径或缓冲区对象 | 'data.csv' |
| 列分隔符 | '\t'(制表符) |
| 缺失值替代标记 | 'NULL' |
| 浮点数格式控制 | "%.3f"(保留3位小数) |
| 指定存储列(列表形式) | 'A','C' |
| 是否保留行索引 | False(去除索引列) |
import pandas as pd
data = {'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]}
df = pd.DataFrame(data)
# 基础存储
df.to_csv('basic.csv')
# 进阶设置(无索引/指定列/自定义分隔符)
df.to_csv('advance.csv',
index=False,
columns=['A','C'],
sep='|',
float_format="%.1f")编辑器 | 无索引模式 | 默认模式 |
|---|---|---|
PyCharm |
|
|
Excel | 三列完整显示 | 首列为自动生成的索引 |
:DataFrame.to_excel()df.to_excel(
excel_writer, # 文件路径/ExcelWriter对象
sheet_name='Sheet1', # 工作表名称
na_rep='', # 缺失值占位符
float_format=None, # 浮点数格式化
columns=None, # 指定存储列
header=True, # 保留列名
index=True, # 保留行索引
startrow=0, # 起始行(从0开始)
startcol=0, # 起始列(从0开始)
engine=None # 写入引擎('openpyxl'/'xlsxwriter')
)参数 | 说明 | 示例值 |
|---|---|---|
| 目标工作表名称 | '销售数据' |
| 数据起始行(跳过标题行可用1) | 2 |
| 数据起始列 | 1(B列开始) |
| 指定写入引擎 | 'openpyxl'(.xlsx) |
import pandas as pd
data = {
'编号': ['mr001','mr002','mr003','mr004'],
'体育': [34.5,33,35,39],
'语文': [110,110,105,108],
'数学': [108,110,105,101],
'英语': [99,110,101,112]
}
df = pd.DataFrame(data)
# 基础存储
df.to_excel('basic.xlsx')
# 进阶设置(指定位置/去除索引)
df.to_excel('advance.xlsx',
sheet_name='成绩表',
index=False,
startrow=1,
startcol=1)设置项 | 文件显示效果 |
|---|---|
默认参数 | 包含索引列,数据从A1单元格开始 |
index=False | 无索引列,数据列紧凑排列 |
startrow=1 | 数据从第2行开始(可预留标题行) |
# CSV保留两位小数
df.to_csv('data.csv', float_format="%.2f")
# Excel科学计数法显示
df.to_excel('data.xlsx', float_format="%.2E")# CSV文件解决中文乱码
df.to_csv('中文数据.csv', encoding='utf-8-sig')
# Excel文件指定编码
with pd.ExcelWriter('中文数据.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, encoding='utf-8')with pd.ExcelWriter('multi_sheet.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet2')问题现象 | 原因分析 | 解决方案 |
|---|---|---|
CSV打开中文乱码 | 编码格式不兼容 | 使用 |
Excel无法保存.xlsx | 缺少写入引擎 |
|
丢失小数点后精度 | 未指定浮点格式 | 设置 |
追加数据覆盖原内容 | 模式设置为'w'(默认覆盖) | 使用 |
格式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
CSV | 跨平台/体积小/易读 | 无格式控制/不支持多工作表 | 数据交换/简单分析 |
Excel | 支持复杂格式/多工作表 | 文件较大/依赖特定软件打开 | 商业报表/可视化展示 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。