Python爬虫基础讲解(十一):数据持久化——CSV模块简介
csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,经常需要将数据做个存档便使用了这一方便的格式。
python中有一个读写csv文件的包,直接import csv即可。利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下。
关注微信公众号,每天都有免费的Python项目案例教学讲解
1. 写入文件
我们把需要写入的数据放到列表中,写文件时会把列表中的元素写入到csv文件中。
import csv ll = [[1,2,3,4], [1,2,3,4], [5,6,7,8], [5,6,7,8]] with open( ' example1.csv', 'w' , newline=' ') as csvfile: """ delimiter:分割符 """ spamwriter = csv.writer(csvfile,delimiter=', ') for 1 in 11: spamwriter.writerow([1,2,3,4])
可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。使用newline=''解决
使用open直接写入
with open( 'examp1e2.csv', 'w') as csvfile: """ delimiter:分割符 """ for 1 in 17: csvfile.write(",".join(map(str,1))) csvfile.write( ' \n ')
2. 读取文件
import csv with open( ' example.csv ' , encoding='utf-8' ) as f: csv_reader = csv.reader(f) for row in csv_reader: print(row)
fi7e: example.csv csv数据
默认的情况下,读和写使用逗号做分隔符(delimiter),当遇到特殊情况是,可以根据需要手动指定字符,例如:
with open( ' example.csv', encoding='utf-8' ) as f: reader = csv.reader(f,delimiter=' , ') for row in reader: print(row)
上述示例指定冒号作为分隔符
有点需要注意的是,当用writer写数据时,None 会被写成空字符串,浮点类型会被调用repr()方法转化成字符串。所以非字符串类型的数据会被str()成字符串存储。所以当涉及到unicode 字符串时,可以自己手动编码后存储或者使用csv提供的unicodewriter 。
3. 写入与读取字典
csv还提供了一种类似于字典方式的读写,方式如下:
其中fieldnames指定字典的 key值,如果reader里没有指定那么默认第一行的元素,在writer里一定要指定这个。
#%%写 import csv with open( ' names.csv', 'w ') as csvfile: fieldnames = ['first_name ', 'last_name '] writer = csv.Dictwriter(csvfi1e,fieldnames=fieldnames) writer.writeheader() writer.writerow(i'first_name ' : 'Baked', 'last_name ' : 'Beans' }) writer.writerow(i'first_name ' : 'Love1y'}) writer.writerow(i 'first_name ' : 'wonderfu7 ', '7ast_name': 'spam ' }) #%%读 import csv with open( ' names.csv ', newline=' ') as csvfile: reader = csv.DictReader(csvfile) for row in reader: print(row[ 'first_name'],row[ ' 1ast_name ' ])
标签:
Python爬虫零基础入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)