【问题标题】:Python String Extraction from text file从文本文件中提取 Python 字符串
【发布时间】:2017-04-05 19:22:56
【问题描述】:

我编写了一个 python 脚本,它将调用服务器并获取响应。在调用服务器时,它将在请求正文中传递一些值。该值应该通过读取文本文件来获取。文本文件示例如下。

我的文本文件示例:


Host: localhost:8080
Connection: keep-alive
.....
.....
{"token":"abcdefhutryskslkslksslslks=="}POST /fill/entry/login HTTP/1.1

Host: localhost:8080
Connection: keep-alive
.....
.....
{"value":"abcdefghijklmnopqrstuvwxyz",
 "pass":"123456789zxcvbnmljhgfds",
 "token":"abcdefghijklmnopqrstuvwxyz=="}POST /fill/health HTTP/1.1

在这里,如果你能观察到,我会得到不同的反应。我需要捕获以 {"value" 开头并以 "} 结尾的字符串(响应的第二部分,如示例中所示)。

在堆栈溢出中搜索时,我遇到了他们提取字符串但它们有一个明确的起点和明确的终点的场景。在我的例子中,即使可以使用搜索字符串“{”url”唯一地识别起点,也无法识别终点,因为文本文件也包含多个其他括号。

任何关于从文本文件中获取特定部分的建议/指针(如上所述)都会非常有帮助。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    来自解释器的re 示例:

    >>> with open('file') as f:
    ...    raw = f.read()
    >>> 
    >>> import re
    >>> pat = re.compile(r'{"value":[^{]+}')
    >>> pat.findall(raw)
    ['{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}']
    >>> pat.search(raw).group()
    '{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}'
    

    【讨论】:

    • 感谢您的想法。我现在能够获取值。但是,正如您自己的解决方案中可用的那样,它会显示所有值。关于如何单独获取第二部分的任何想法?我的意思是,字符串从“{”value”开始并以“}”结束。
    【解决方案2】:

    如果您的文件不是很大,您可以使用file.readlines() 将整个文本读入一个字符串,然后使用regular expression library 提取所需的部分。

    【讨论】:

    • 文件变大了。
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2023-02-08
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多