我还是python的新手。 我有一个带有数字列表的文本文件,每个数字都有两个“属性”:
250 121 6000.654
251 8472 650.15614
252 581 84.2
我想搜索第一列并将第二列和第三列作为单独的变量返回,以便我以后可以使用它们。
cmd = """ cat new.txt | nawk '/'251'/{print $2}' """
os.system(cmd)
这适用于它打印$ 2列,但我想将此输出分配给变量,类似于此(但这会返回错误AFAIK的数量):
cmdOutput = os.system(cmd)
我也希望根据变量更改nawk'd值,如下所示:
cmd = """ cat new.txt | nawk '/'$input'/{print $2}' """
如果有人可以提供帮助,谢谢。
答案 0 :(得分:5)
请勿使用cat
和nawk
。请。
使用Python
import sys
target= raw_input( 'target: ' ) # or target= sys.argv[1]
with open('new.txt','r') as source:
for columns in ( raw.strip().split() for raw in source ):
if column[0] == target: print column[1]
否cat
。否nawk
。
答案 1 :(得分:2)
首先,要格式化cmd字符串,请使用
input = '251'
cmd = """ cat new.txt | nawk '/'{input}'/{{print $2}}' """.format(input=input)
但实际上,你根本不需要外部命令。
input = '251'
with open('new.txt', 'r') as f:
for line in file:
lst = line.split()
if lst[0] == input:
column2, column3 = int(lst[1]), float(lst[2])
break
else: # the input wasn't found
column2, column3 = None, None
print(column2, column3)
答案 2 :(得分:0)
我认为您正在寻找的是:
subprocess.Popen(["cat", "new.txt","|","nawk","'/'$input/{print $2}'"], stdout=subprocess.PIPE).stdout