搜索文本文件中的字符串,保存包含列表中项目的行,如果文本文件中不存在该项目,则返回NA

2024-05-15 21:11:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份物品清单

ls=["John","Tanner",'Mary','Anna','25'] 

和文本文件:

 V1 'John' 'blablablabla...'
 V2 'Anna' 'blablablabla...'
 V3 'Josh' 'blablablabla...'
 V4 'Mary' 'blablablabla...'
 V5 'Steven' 'blablablabla...'

我想在文本文件中搜索列表中的每一项,并保存包含该项的行。你知道吗

var=[]
with open('C:/Maryam/example/test.txt', 'r') as file:
    for line in file:
        for item in ls:
            if item in line:
                var.append(line)

var   

输出已经如下所示:

["  V1 'John' 'blablablabla...'\n","  V2 'Anna' 'blablablabla...'\n",
"  V4 'Mary' 'blablablabla...'\n"]

但我希望得到这样的结果:

["  V1 'John' 'blablablabla...'\n", 'NA' , "  V2 'Anna' 'blablablabla...'\n",
"  V4 'Mary' 'blablablabla...'\n", 'NA']

我试图在列表中生成'NA',但没有找到它。 我使用 对于文件中的行: 因为我想保存整行,包括特定的字符串。有没有办法使用正则表达式,这样我就可以去掉行上的for循环,然后保存整行。 非常感谢。你知道吗


Tags: in列表forvarlinejohnlsv2
3条回答

我建议使用字典而不是列表,这样您就可以为要搜索的每个元素和相应的行存储一个条目(如果有的话,NA否则):

# Initialize the result dictionary
result = {}
for name in ls:
    result[name] = 'NA'

# Process the file
with open('C:/Maryam/example/test.txt', 'r') as file:
    for line in file:
        # For each line check if it contains a reserved keyword
        for name in result.keys():
            if name in line:
                result[name] = line

# Show result (key = name, value = line content)
result

# Show only the values (line contents)
result.values()

您可以更改代码以检查在每一行中是否找到任何内容:

var=[]
with open('C:/Maryam/example/test.txt', 'r') as file:
    for line in file:
        was_found=False
        for item in var:
            if item in line:
                var.append(line)
                was_found=True
        if not was_found:
            var.append("NA")

也可以使用“for break else”结构:

for item in ls:
    if item in line:
        var.append(line)
        break
else:
        var.append("NA")

相关问题 更多 >