我正在设置一个自动作业,需要解析来自ftp站点的csv文件,每个文件包含数万行。我想在解析其余文件之前,对目录进行预处理以消除重复文件。问题是重复文件被推送到ftp,但行顺序不同(即相同数据,不同顺序)。这导致“重复文件”具有不同的散列和逐字节比较。以最少的处理
我想尽量减少文件操作,所以我尝试使用csvsort模块对CSV进行排序,但这给了我一个索引错误:IndexError: list index out of range
。以下是相关代码:
from csvsort import csvsort
csvsort(input_filename=file_path,columns=[1,2])
我试图查找并消除空行,但这似乎不是问题所在,正如我所说的,我希望将文件操作保持在最低限度,以保持文件完整性。此外,我无法控制文件的创建或将文件推送到ftp
我可以想出许多方法来解决这个问题,但它们都涉及打开CSV、读取内容、操作它等等。我是否可以进行忽略行顺序的轻量级文件比较,或者我必须进行更繁重的处理
您不指定有多少数据。我对这个的看法会因尺寸不同而有所不同。我们说的是100行吗?还是几百万行
如果您有“很少”行,您可以轻松地对行进行排序。但是如果数据变长,你可以使用其他策略
我之前已经用AWK解决了“从文件A中剔除出现在文件B中的行”的问题,因为AWK只需在长文件(A)中运行一次就可以做到这一点,这使得这个过程非常快。但是,您可能需要调用外部程序。不确定这是否适合你
如果您的行不完全相同(假设您只需要比较几个字段中的一个),AWK也可以这样做。只需将字段提取到变量中
如果您选择这样做,那么脚本就是:
配合使用
差异列表是指从完整列表中选择的不在小列表中的项目
因此,
pandas
有一个内置的哈希函数,可以选择忽略索引。由于哈希是在每行上计算的,因此需要运行额外的求和函数。就代码而言,它几乎是我所希望的轻量级,就运行时而言,它在5秒内解析了15个文件(每个文件中有30k行,17列)相关问题 更多 >
编程相关推荐