簡體   English   中英

搜索文本文件中的字符串,保存包含列表中某項的行,如果文本文件中不存在該項,則返回NA

[英]Search a string in a text file, save a line that contains an item from the list and return NA if the item does not exist in the text file

我有項目清單

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循環,然后保存整行。 謝謝。

您可以更改代碼以檢查是否在每個不同的行上都找到了什么:

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")

我建議使用字典而不是列表,以便為每個要搜索的元素和相應的行存儲一個條目(如果有,否則為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()

可以使用“ for-break-else”構造:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM