我想阅读文本文件,并在下面的文本中找到以56开头的单词,并将每个单词传递给变量,然后传递给python文件作为参数。
我的示例文本文件内容-
props.location.state
我喜欢以
的形式传递给python文件51:40:2e:c0:01:c9:53:e8
56:c9:ce:90:4d:77:c6:03
56:c9:ce:90:4d:77:c6:07
51:40:2e:c0:01:c9:54:80
56:c9:ce:90:12:b4:19:01
56:c9:ce:90:12:b4:19:03
var1应该具有值56:c9:ce:90:4d:77:c6:03 var2的值应为56:c9:ce:90:4d:77:c6:07 var3的值应为56:c9:ce:90:12:b4:19:01
等等
我写了类似下面的代码,但是没有用
[#var1 =“ 51:40:2e:c0:01:c9:53:e8”] [#var2 =“ 51:40:2e:c0:01:c9:53:ea”]
mytestfile.py var1 var2 var3
filepath = '/root/SDFlex/work/cookbooks/ilorest/files/file.txt'
with open(filepath) as fp:
line = fp.readline()
cnt = 1
while line:
print("Line {}: {}".format(cnt, line.strip()))
line = fp.readline()
cnt += 1
结束
预先感谢
答案 0 :(得分:0)
因此,此代码显示所需变量的字符串:
# a.py
with open('file.txt') as f:
result = ' '.join(map(lambda x: f'<{x}>',
filter(lambda x: x.startswith('56'),
map(str.strip, f))))
print(result, end='')
输出:
<56:c9:ce:90:4d:77:c6:03> <56:c9:ce:90:4d:77:c6:07> <56:c9:ce:90:12:b4:19:01> <56:c9:ce:90:12:b4:19:03>
您可以使用xargs
将该程序的结果传递给另一个python程序。例如,如果您有一个简单的程序可以打印其参数:
# b.py
import sys
print(sys.argv)
不仅仅是键入shell:
python3 a.py | xargs python3 b.py
输出:
['b.py', '<56:c9:ce:90:4d:77:c6:03> <56:c9:ce:90:4d:77:c6:07> <56:c9:ce:90:12:b4:19:01> <56:c9:ce:90:12:b4:19:03>']
答案 1 :(得分:0)
您是否要对以'56:'开头的每一行运行一次mytestfile.py
,如下所示:
python mytestfile.py 56:c9:ce:90:4d:77:c6:03
python mytestfile.py 56:c9:ce:90:4d:77:c6:07
python mytestfile.py 56:c9:ce:90:12:b4:19:01
或者您只想运行一次,将文件中的所有值作为参数提供,例如,使用示例数据:
python mytestfile.py 56:c9:ce:90:4d:77:c6:03 56:c9:ce:90:4d:77:c6:07 56:c9:ce:90:12:b4:19:01
如果是前者(每条匹配行一个),最简单的方法是:
grep '^56' textfile | xargs python mytestfile.py
否则,您可以这样做:
python mytestfile.py `grep '^56' textfile`
请注意,后者取决于文件中是否没有空格-如果文件很大(可能会遇到命令行长度限制),这会有些危险。