我在使用python选择一行的第一个元素时遇到了一些问题。 我有一个txt文件,其中数据以这种方式组织:
AES
我想打印第一个成员与列表成员匹配的行:
0 3 546
1 2 435
2 4 900
22 3 384
我试图这样做:
myList = [1, 22]
但它回到我身边:
for i in externalFile:
if i[0] in myList:
print (i)
因为我发现,我认为1 2 435
2 4 900
22 3 384
的“22”与外部文件的“2”之间存在匹配。有人知道如何解决这个问题吗?
答案 0 :(得分:4)
这应该有效。逐行读取文件,检查列表中的第一个单词是否打印。
lst = [1, 22]
with open('file.txt') as f:
for line in f:
words = line.split()
if int(words[0]) in lst:
print(line)
# 1 2 435
# 22 3 384
答案 1 :(得分:0)
使用str.split
按空格分割线条。然后比较
<强>实施例强>
myList = [1, 22]
with open(filename, "r") as infile:
for line in infile:
val = line.split()
if int(val[0]) in myList:
print(line.strip())
<强>输出:强>
1 2 435
22 3 384
答案 2 :(得分:0)
尝试下面的解决方案,我只是做了一个简单的列表理解,我将文件的每一行拆分为' '
并获取它的第一个元素并检查它是否以{{1的任何元素开头如果是,请将其删除,以便myList
不在字符串中
'\n'
输出:
myList = [1, 22]
with open('test.txt') as f:
print([i.strip() for i in f.readlines() if int(i.split(' ')[0]) in myList])
如果您希望它像您想要的那样显示,请尝试下面的代码
['1 2 435', '22 3 384']
输出:
myList = [1, 22]
with open('test.txt') as f:
lstcomp = [i.strip() for i in f.readlines() if int(i.split(' ')[0]) in myList]
for i in lstcomp:print(i)