【发布时间】:2018-05-27 02:10:23
【问题描述】:
我有一个空格分隔文件 (file1.csv),我在该文件上手动执行 3 个 UNIX 操作,即:
第 1 步。从每一行中删除所有双引号(“)。
sed 's/"//g' file1.csv > file_tmp1.csv
第二步。删除任何行开头的所有空格。
sed 's/^ *//' file_tmp1.csv > file_tmp2.csv
第三步。删除每行文本之间的所有额外空格。
cat file_tmp2.csv | tr -s " " > file1_processed.csv
所以,我想知道是否有任何更好的方法来以 Python 方式处理这个和那个,而不需要太多的计算时间。使用 UNIX 命令完成这 3 个步骤大约需要 5 分钟(最大)时间。
请注意文件file1.csv 是一个空格分隔的文件,我希望它保持空格分隔。
此外,如果您的解决方案建议将整个 file1.csv 加载到内存中,那么我会要求您建议一种以块的形式完成此操作的方法,因为文件太大(约 20 GB 左右)每次都无法加载到内存中.
提前致谢。
【问题讨论】:
-
我怀疑您能否获得更接近 UNIX 工具的性能。请注意,这些工具是用 C 语言编写的,并针对性能进行了高度优化。
-
你需要在python中做,还是你只是认为python会更快?
-
也许管道,至少,命令?这样就不会生成中间文件,并且单通道将转换给定文件?
-
@user1767754 是的,我想以最优化的方式使用 Python 完成这些操作
-
您可以通过不使用正则表达式来删除字符来优化它。 python 在字符串上提供了
.strip()方法,使用.replace您可以删除引号。我不确定替换的性能,但剥离前导/尾随空格应该更快。但总的来说,sed应该非常快,而 bash 脚本中唯一慢的就是当您需要为每个文件生成一个包含大量文件的 sed 时。