繁体   English   中英

做基本的UNIX操作Python方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM