Python中高效读取和验证csv文件

3
我有多个CSV文件(小于10G),需要以内存高效的方式逐个验证文件。我的验证包括:
1->文件是否正确分割
2->验证某些列,如整数/小数
3->验证某些列的日期格式(例如yyyy/MM/dd)。
目前我正在使用
with open(file_name, 'r') as myCSV:
        CSVreader = csv.reader(myCSV)
        for row in CSVreader:
                my_logic

循环每一行并验证每行的条件。是否有更好的库/方法可用?我听说过pandas,但不确定它是否具有内存效率。


2
定义“更好”是什么?从大约26个观众中,我是唯一一个认为CSV文件行迭代器已经非常高效的人吗?如果列数很大,那么我才会考虑寻找替代实现。就目前而言,我认为这个问题过于广泛:你正在寻求“更好的库/方法”,而没有尝试一些东西并比较内存使用情况,或询问为什么实现a比b更好。 - Oliver W.
1个回答

1

我之前使用pandas写了一个类似的循环,但是运行起来非常慢。后来发现可以使用以下技巧来加速:

for row in dataframe:
    some logic over row.col1, row.col2, etc...

变成:

for (col1, col2, ...) in zip(dataframe.col1.values, dataframe.col2.values, ...):
    some logic over col1, col2, etc...

虽然不确定与内存有何关联,但使用64位版本的Python可以处理相当大的文件。


对我来说,内存也是一个很大的限制!我认为 zip(所需列)会将所有内容加载到内存中,如果我错了,请纠正我。 - Turbo Sullivan
@TurboSullivan 如果你正在使用Python3,那么你是错的。在Python2中,使用itertools.izip来使用zip功能,而不会一次性地将所有内容加载到内存中。 - Tadhg McDonald-Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接