我有一个像数据库一样的文本文件设置。
Host.txt:
4050, xxx.xxx.xxx.xxx, green
4052, xxx.xxx.xxx.xxx, blue
4451, xxx.xxx.xxx.xxx, red
变量x
将包含应与文件中一行的第一个列表项匹配的字符串。
x = 4052
我需要能够打开这个文件,并逐行阅读,直到它与我的x
变量匹配列表中的第一项。当它匹配时,我希望它将文本文件中该行的所有项目放到列表变量中,例如device[]
打印列表如下所示:
print device
>>>[4052, xxx.xxx.xxx.xxx, blue]
我试过这个:
device = []
x = '4052'
with open('Host.txt', "r") as f:
for x in f:
device.append(x)
print device
输出:
C:\Python27\Scripts>python List.py
['4050, xxx.xxx.xxx.xxx, green\n', '4052, xxx.xxx.xxx.xxx, blue\n', '4451, xxx.x
xx.xxx.xxx, red']
哪个不对。
答案 0 :(得分:0)
你关闭了,但遗漏了一些基础知识。请尝试下面的代码。
x = '4052'
with open('Host.txt', 'r') as f:
for line in f:
if line.startswith(x):
device = [word.strip() for word in line.split(',')]
break
我做的第一件事就是将循环中的变量名称从x
更改为line
。这样您就不会与搜索变量x='4052'
发生冲突。接下来,您不希望将文件的每一行附加到列表中,只需要第一行与x
变量匹配即可。这就是startswith()
方法的作用。
如果你得到一个匹配,最后你会得到一个新行符号'\n'
的行。 strip()
删除此新行字符以及每个单词中的任何空格。 split()
将逗号分隔,以便您可以"追加"列表的每一部分。我没有使用append
,而是使用了list comprehension所谓的{{3}}循环遍历split()
创建的列表,并将每个项目添加到名为{{的新列表中1}}。
请注意device
中的项目将是字符串,因此如果您想要以整数形式访问第一项(例如),则必须转换它。另请注意,这只会返回文件中的第一个匹配项。如果您希望每次出现,可以在device
循环之外创建一个空列表,每次匹配时都向其附加for
,并删除device
命令。