在文本文件中搜索字符串,保存包含列表中项目的行,如果文本文件中不存在该项目,则保存 return 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")
我有一个项目列表
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")