python - 使用 python 搜索文本中的字符串

标签 python list if-statement full-text-search

我有一个 list

list=["John","Tanner",'Mary','Anna',"Oscar",'ID'] 

和一个文本文件。文本文件内部如下所示:

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

我想搜索文本文件中的列表,最后我想得到结果:

RESULT=[1,'NA',4,2,'NA',0].

1,4和2是从V1、V4和V2中提取的数字。这是代码:

start_time = time.time()
for item in list:
with open('C:/Mary/test.txt', 'r') as file:
    for line in file:
        if item in line:
            var_name=line.split()[0]
            if var_name=='ID':
                var_loc.append(0)
            else:
                var_loc.append(int(re.split('(\d+)',var_name)[1]))
            break
        #else:
         #   var_loc.append('NA')

total_time = time.time() - start_time
total_time

问题:当我从列表中选择一个项目并在文本中搜索时,它在文本中不存在,我希望它返回“NA”。但我无法弄清楚如何正确地做到这一点。正如我所说,我希望结果最后看起来像这样:

RESULT=[1,'NA',4,2,'NA',0].

谢谢。

最佳答案

您可以使用正则表达式来做到这一点:

with open('C:/Mary/test.txt', 'r') as f:
    s = f.read()
    for item in items:
        if item == 'ID':
            var_loc.append(0)
            continue

        m = re.search(f"^V(\d+) '{item}'", s, flags=re.MULTILINE)
        if m is None:
            var_loc.append('NA')
        else:
            var_loc.append(m.group(1))

请不要使用 list 关键字作为变量名 - 这是 python 的 list 函数的关键字(我将其替换为 items) .

关于python - 使用 python 搜索文本中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699120/

相关文章:

c# - 在不使用额外变量或使用 foreach 循环的情况下显示 List<string[]> 的值

c# - 为什么我们有时在初始化时不使用括号?

检查是否有超过 1 个参数

javascript - 为函数内的 else 语句创建循环

python - 有时脚本闲置,需要我按 RETURN 才能解锁它们 - Python

python - 从 Ruby on Rails Web 服务器执行 python 脚本

python - 为什么 zmq.setsockopt_string 提示默认 'ascii' 代码?

python - 如何从 re.findall 中排除一个字符串?

python - 为文件夹中的文件生成字典元素列表

javascript - javascript if 的多个操作