python 带有 -F 选项的子进程 awk 和使用输入文件的变量
python subprocess awk with -F option and using variable for input file
我有一个文本文件,其中的数据以“|”分隔
例如
123 | 456 | 789
我只想打印第二列。
我可以像这样在 shell 中使用 awk:awk -F'|' '{打印 $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 }', file])
print var
这会打印第二列,但它使用 space 作为分隔符。我想将分隔符更改为“|”使用 awk 的 -F 选项。
subprocess.check_call
获取由 space 个字符连接并传递给 shell 的字符串列表。所以你可以只添加 -F'|'
参数作为列表中的一个项目。唯一的问题是列表使用单引号。如果你想保持一致,你需要在你的参数中转义单引号:
var = subprocess.check_call(['awk', '-F\'|\'', '{print }', file])
或者,python 也接受双引号作为字符串分隔符:
var = subprocess.check_call(['awk', "-F'|'", '{print }', file])
希望对您有所帮助。
尝试:
var = subprocess.check_call(['awk', '-F|', '{print }', 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...
我有一个文本文件,其中的数据以“|”分隔
例如
123 | 456 | 789
我只想打印第二列。 我可以像这样在 shell 中使用 awk:awk -F'|' '{打印 $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 }', file])
print var
这会打印第二列,但它使用 space 作为分隔符。我想将分隔符更改为“|”使用 awk 的 -F 选项。
subprocess.check_call
获取由 space 个字符连接并传递给 shell 的字符串列表。所以你可以只添加 -F'|'
参数作为列表中的一个项目。唯一的问题是列表使用单引号。如果你想保持一致,你需要在你的参数中转义单引号:
var = subprocess.check_call(['awk', '-F\'|\'', '{print }', file])
或者,python 也接受双引号作为字符串分隔符:
var = subprocess.check_call(['awk', "-F'|'", '{print }', file])
希望对您有所帮助。
尝试:
var = subprocess.check_call(['awk', '-F|', '{print }', 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...