【问题标题】:Searching text file for string in python在python中搜索字符串的文本文件
【发布时间】:2017-08-17 19:41:49
【问题描述】:

我正在使用 Python 在大型文本文件中搜索某个字符串,该字符串下方是我有兴趣对其执行数据分析的数据。

def my_function(filename, variable2, variable3, variable4):
array1 = []

with open(filename) as a:
    special_string = str('info       %d        info =*' %variable3)
    for line in a:
        if special_string == array1:
            array1 = [next(a) for i in range(9)]
            line = next(a)    
            break
        elif special_string != c:
            c = line.strip()

special_string 变量中,info = 之后的任何内容都可能有所不同,因此我尝试使用如上所示的通配符运算符。我可以让函数运行的唯一方法是,如果我输入我想要搜索的确切字符串,包括等号之后的所有内容,如下所示:

special_string = str('info         %d       info = more_stuff' %variable3)

如何将通配符运算符分配给字符串的其余部分以使我的函数更加健壮?

【问题讨论】:

  • 使用正则表达式。 * 在 Python 字符串操作中不起作用。

标签: python function parsing wildcard


【解决方案1】:

如果您的特殊字符串 always 出现在一行的开头,那么您可以使用下面的检查(其中special_string 没有*结束):

line.startswith(special_string)

否则,请查看module re in the standard library 以使用正则表达式。

【讨论】:

  • 这在这种情况下效果最好,因为它始终位于行首。尽管我需要弄清楚 re.,但为了使它更健壮
  • 如果您经常使用字符串和正则表达式...我听说过很多关于该模块的好消息...而且该页面有很多很好的示例可以开始使用...
【解决方案2】:

你有没有想过使用这样的东西? 根据您的输入,我假设如下:

variable3 = 100000
special_string = str('info         %d       info = more_stuff' %variable3)

import re
pattern = re.compile('(info\s*\d+\s*info\s=)(.*)')
output = pattern.findall(special_string)
print(output[0][1])

哪个会返回:

more_stuff

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多