【问题标题】:How to determine if a line in a file matches a wildcard expression?如何确定文件中的一行是否与通配符表达式匹配?
【发布时间】:2022-01-18 01:29:45
【问题描述】:

我应该如何输入 Python if 条件来匹配通配符表达式 (*)?

我正在尝试在文件中查找与通配符表达式匹配的行 - ...string1*string2*string3...

with open(file,'rw') as FILE:
  lines = FILE.readlines()
  for line in lines:
       if line == "string1*string2*string3":
       print (line)

【问题讨论】:

  • 您可以使用regex 来匹配.findall 并在其上使用if 条件。
  • 注意正则表达式是"string1.*string2.*string3"
  • 另请注意"rw" 不是有效的文件模式。我怀疑你只是想要"r"
  • 我需要同时打开、读取和写入File。使用 Tim 的更正进行编辑,效果很好。谢谢!
  • 如何将字符串附加到 IF 找到的特定行的开头或开头?

标签: python if-statement wildcard


【解决方案1】:

这是一个示例:

import re
with open(file,'r') as file:
  for line in file.readlines():
    if re.search( "string1.*string2.*string3", line ):
       print (line)

当然,如果这就是你所做的一切,那么你根本不需要 Python:

grep 'string1.*string2.*string3'  file.txt

或者在 Windows 上:

findstr /r "string1.*string2.*string3" file.txt

【讨论】:

  • 要成为pythonic并符合PEP8,您需要“修复”一些事情:缩进的四个空格的倍数,'r'open()的默认值,因此无需传递它,删除()print() 中的空格,而不是print ()。对于大多数人来说,这些是最讨厌的,但如果他们是真正的 Pythonista,Pythonista 会这样做。
【解决方案2】:

这是一个使用正则表达式的解决方案:

import re
from pathlib import Path

mystring = re.compile('string1.*string2.*string3')
filename = Path('/path/to/some/file')

with filename.open() as f:
    for line in f.readlines():
        if mystring.match(line):
            print(line)

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2015-04-17
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多