读取文本文件值并将其分配给变量的每个值

时间:2018-08-13 02:29:09

标签: python

我想阅读文本文件,并在下面的文本中找到以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

结束

预先感谢

2 个答案:

答案 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`

请注意,后者取决于文件中是否没有空格-如果文件很大(可能会遇到命令行长度限制),这会有些危险。