[英]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.