[英]doing basic UNIX operations Pythonic way
我有一个空格分隔的文件( file1.csv
),在该文件上我手动执行3个UNIX操作,即:
第1步。 从每一行中删除所有双引号(“)。
sed 's/"//g' file1.csv > file_tmp1.csv
第2步。 删除任何行开头的所有空白。
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
加载到内存中,那么我将要求您建议一种以大块方式完成的方法,因为文件太大( file1.csv
GB左右),每次都无法加载到内存中。
提前致谢。
一个明显的改进是将tr
步骤转换为sed
并将所有部分组合为一项工作。 首先测试数据:
$ cat file
"this" "that"
工作:
$ sed 's/"//g;s/^ *//;s/ \+/ /g' file
this that
awk中的所有这些步骤如下:
$ awk '{gsub(/\"|^ +/,""); gsub(/ +/," ")}1' file
this that
如果您进行测试,请告诉我用了多长时间。
这是一次读取一行并执行您在Python中指定的替换的过程。
with open('file1.csv') as source:
for line in source:
print(' '.join(line.replace('"', '').split())
split()
的默认行为包括修剪任何前导(和尾随)空格,因此我们没有明确指定。 如果您需要保留空白,则可能需要更新需求。
您的shell脚本尝试使用多个临时文件和sed
多次调用也不是如何在shell中执行此操作的好示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.