python csv.reader读取csv文件报错,信息如下
Traceback (most recent call last):
File "D:\pywork\ZT_DataTeamMember\zhanglh\python\knowledge_base\esi_rank.py", line 82, in <module>
csv_2_mdb(mdbPath)
File "D:\pywork\ZT_DataTeamMember\zhanglh\python\knowledge_base\esi_rank.py", line 69, in csv_2_mdb
row_count = sum(1 for row in reader) - 1
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\pywork\ZT_DataTeamMember\zhanglh\python\knowledge_base\esi_rank.py", line 69, in <genexpr>
row_count = sum(1 for row in reader) - 1
^^^^^^^^^^^^^^^^^^^^^
_csv.Error: field larger than field limit (131072)
这个错误是因为 csv.reader 默认将每行读取的内容的长度限制为 131072 字节,如果读取的某行内容超过了这个限制,就会抛出 _csv.Error 异常。为了解决这个问题,可以通过设置 csv.field_size_limit 来增加 CSV 文件读取的行长度限制。
import os
import csv
# 设置 CSV 文件读取的行长度限制为最大值
csv.field_size_limit(2**31-1)
# 定义目标目录
directory = '/path/to/directory'
# 遍历目录下的所有文件
for filename in os.listdir(directory):
# 如果文件名以 '.csv' 结尾,则认为是 CSV 文件
if filename.endswith('.csv'):
# 打开文件,使用 csv.reader 读取文件内容
with open(os.path.join(directory, filename), 'r') as file:
reader = csv.reader(file)
# 统计文件行数,注意要跳过标题行
row_count = sum(1 for row in reader) - 1
# 输出文件名和行数
print(f"{filename}: {row_count} 行")
使用 csv.field_size_limit() 函数将 CSV 文件读取的行长度限制设置为一个很大的值 2**31-1,这样就可以避免 _csv.Error 异常的抛出。
需要注意的是,将 CSV 文件读取的行长度限制设置为很大的值可能会导致内存占用过高,因此应该根据实际情况进行调整。如果你的 CSV 文件行数非常大,可以考虑使用逐行读取的方式来避免一次性读取整个文件内容。