Python 将字符串变量与*.txt中的行匹配,将匹配行添加到列表[]变量
我有一个像数据库一样的文本文件设置 Host.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
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”文件。