Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串变量与*.txt中的行匹配,将匹配行添加到列表[]变量_Python_List_File_File Io - Fatal编程技术网

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

Python 将字符串变量与*.txt中的行匹配,将匹配行添加到列表[]变量,python,list,file,file-io,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 devi

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

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

这是不正确的。

你很接近,但缺少一些基本知识。请尝试下面的代码

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删除这个新行字符和每个单词中的任何空白。“拆分”以逗号分隔行,以便可以将行的每个部分附加到列表中。我没有使用append,而是使用了所谓的a,它在split创建的列表上循环,并将每个项目添加到名为device的新列表中


请注意,设备中的项目将是字符串,因此如果您想访问第一个项目(例如作为整数),则必须将其转换为字符串。还要注意,这将只返回文件中的第一个匹配项。如果希望每次出现,可以在for循环之外创建一个空列表,在每次有匹配项时向其追加设备,并删除break命令

用什么语言?你已经写的代码在哪里?你用什么语言写的?你已经试过什么了?发布一个尝试,解释什么不起作用,然后我们可以插入advice/advictions.Python,我不确定从哪里开始,因为我发现没有任何示例接近我的要求。您可以从开始阅读文件。我假设您知道如何进行文本值比较以及如何打破循环,否则我会先尝试一些基本的编程教程。我添加了我尝试过的内容,即使我知道它有点离谱。非常好:C:\Python27\Scripts>python List.py['4052',xxx.xxx.xxx.xxx',blue']您可能还希望对列表中的单词使用strip方法来消除空白。我会把它添加到答案中。很棒的解释。这只是作为字符串发布到html页面。因此,将它们作为字符串保留是很好的。我希望这个答案将有利于其他具有相同类型数据处理需求的人。此外,我刚刚删除了列表项之间主机文件中的空间。但我确实理解删除列表项之间空格的必要性。我可以把它夹在文件中,但是通过“Host.txt”文件。