Python中如何读取CSV文件
请教各位大神,我菜鸟 python 一枚,现在想读取一个超大的 csv 文件,不想每次从头读取,就需要个游标,这个怎么实现呢,万分感谢。。
Python中如何读取CSV文件
import csv
# 方法1:使用csv.reader读取为列表
with open('data.csv', 'r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row) # 每行是一个字符串列表
# 方法2:使用csv.DictReader读取为字典
with open('data.csv', 'r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row) # 每行是一个OrderedDict,键为列名
# 方法3:使用pandas(需要安装:pip install pandas)
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head()) # 返回DataFrame对象
关键点:
csv.reader返回列表,适合简单处理csv.DictReader返回字典,通过列名访问数据更直观pandas.read_csv功能最强大,支持自动类型推断、缺失值处理等
编码问题: 如果文件包含中文,务必指定encoding='utf-8'或encoding='gbk'
一句话建议: 小文件用标准库,大数据处理用pandas。
需要游标你就直接使用游标,不太懂你烦恼哪里<br>with open('data.csv'):<br> f.seek(10)# 从第 11 行开始读取<br> c = csv.reader(f)<br> for line in c:<br> print(line)<br>
with open(‘data.csv’) as f:
f.seek(10)是往后寻找 10 个字节,并不是 10 行。
可行的做法:
import csv
with open(‘test.csv’,‘r’) as f:
for i in range(10):
f.next()
reader = csv.reader(f)
for row in reader:
print(row)
还有你游标是什么意思,csv 读取一次就到内存里了,你直接操作 reader 这个 list 就可以了啊。
晕,v2ex 编辑太渣了吧,缩进给我吞了
请问如果是 100G 的文件也可以这样操作吗?
按照每行平均 80 个字节,100G 的文本文件有 13.5 亿行。
如果你确定需要处理这么大的单独文本文件,首先产生这个文本文件的一方是需要提高姿势水平的。然后说具体做法,最简单的就是把文件分割啊。你要是觉得性能差可以自己去搞一套更高效的没人拦着你😏。
csv 之间先导入 db 吧,之后就随便搞了,节省资源?那就 sqlite
把文件当 db 用,拿就是要自己再造一个文件型 db 的轮子了…
pandas.read_csv
###END###
上次读完之后用 f.tell()记一下读到哪里了 下次用 f.seek()直接挪过去
需要记录上次游标所在的位置,用 f.tell(),可是使用 for 循环读取内容相等于调用 next()方法,然后用 f.tell()会出错,怎么记录上次游标所在位置呢
还真的就差不多那么大的文件,而且源文件一天内不是固定时间段写入,就还得用到增量读取。
csv 模块,使用 for 循环后,调用 tell()方法,会出错,有什么解决办法吗
把 csv 存到数据库+1
with open(‘data.csv’) as f:
for line in f:
print(line)
使用 Python 的内置电池解决吧
https://docs.python.org/3/library/linecache.html

