将字符串变量匹配到* .txt中的行,将匹配行添加到List []变量

时间:2014-07-28 01:00:12

标签: python list file file-io

我有一个像数据库一样的文本文件设置。

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']

哪个不对。

1 个答案:

答案 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命令。

相关问题