Python中更高效读取CSV文件的方法及自定义分隔符实现
Python CSV读取的高效方法与分隔符设置
一、能否指定非逗号分隔符?
完全可以,csv.reader本身就支持通过delimiter参数自定义分隔符,你的代码可以直接修改适配:
import csv with open(filename, 'r') as csvfile: # 示例:用制表符作为分隔符,也可替换为分号`;`、竖线`|`等任意字符 csvreader = csv.reader(csvfile, delimiter='\t') fields = next(csvreader) rows = [] for row in csvreader: rows.append(row)
另外如果CSV里存在带引号包裹的字段(比如字段内容本身包含分隔符),csv.reader会自动识别处理,不用担心解析错误。
二、更高效的CSV读取方法
如果处理的是大体积CSV文件,原生csv模块的效率确实有限,推荐两种更高效的方案:
1. 使用Pandas的read_csv
Pandas的read_csv底层基于C语言实现,读取速度远快于原生csv模块,还能直接将数据转换成DataFrame格式,方便后续分析处理:
import pandas as pd # 读取文件,可通过delimiter指定分隔符 df = pd.read_csv(filename, delimiter=',') # 获取表头 fields = df.columns.tolist() # 转换为列表格式的行数据 rows = df.values.tolist()
针对超大文件,还可以通过chunksize参数分块读取,避免内存溢出:
# 每次读取1000行数据 for chunk in pd.read_csv(filename, chunksize=1000): # 处理当前块的数据 process(chunk)
2. 使用NumPy的genfromtxt/loadtxt
如果你的CSV数据以数值类型为主,NumPy的这两个函数读取效率极高,适合纯数值的数据集:
import numpy as np # 跳过表头行,读取数值数据 data = np.genfromtxt(filename, delimiter=',', skip_header=1) # 单独读取表头 fields = np.genfromtxt(filename, delimiter=',', max_rows=1, dtype=str)
如果是小文件场景,原生csv模块已经足够高效,没必要引入额外库;但大文件下,Pandas或NumPy的性能优势会非常显著。
内容的提问来源于stack exchange,提问作者Rodger
相关产品推荐
相关产品推荐

