我有一个文本文件,其数据以“|”
分隔E.g。
123 | 456 | 789
我只想打印第二列。 我可以在shell中使用awk:awk -F'|' '{print $ 2}'file.txt
但是,我想使用python子进程来执行此操作。输入文件也必须是变量。
现在,这就是我所拥有的。
import subprocess
file = "file-03-10-2016.txt"
with open('another_file.txt', 'wb') as output:
var = subprocess.check_call(['awk', '{print $2}', file])
print var
这将打印第二列,但它使用空格作为分隔符。我想将分隔符更改为“|”使用awk的-F选项。
答案 0 :(得分:0)
subprocess.check_call
获取与空格字符连接并传递给shell的字符串列表。因此,您只需将-F'|'
参数添加为列表中的项目即可。唯一的问题是该列表使用单引号。如果你想保持一致,你需要在参数中转义单引号:
var = subprocess.check_call(['awk', '-F\'|\'', '{print $2}', file])
或者,python也接受双引号作为字符串分隔符:
var = subprocess.check_call(['awk', "-F'|'", '{print $2}', file])
希望有所帮助。
答案 1 :(得分:0)
尝试:
var = subprocess.check_call(['awk', '-F|', '{print $2}', file])
但是,我觉得我应该指出这个任务在纯python中很容易做到:
def awk_split(file_name, column, fs=None):
with open(file_name, 'r') as file_stream:
for line in file_stream:
yield line.split(fs)[column]
for val in awk_split(file, 1, fs='|'):
# do something...