Python:使用Ast modu分析文本文件中的字符串时出错

2024-04-28 03:41:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件(.txt),其中包含以下两个字符串(这是一个较大文件的片段,其中所有字符串的格式都相同):

["('a', '1')", "('b', '2')"]
["('c', '3')", "('d', '4')"]

我使用下面的代码来解析文本文件中的字符串,以便可以访问每个元素进行数据分析。如果我将字符串声明为变量,则该代码适用于该字符串,例如:

字符串=[“('c','3')”,“('d','4')”]

但该代码不适用于文本文件:

import ast

text_file = open('text_file.txt', 'r')

for string in text_file:
    parsed = list([ast.literal_eval(x) for x in text_file])
    print parsed

我希望得到:

[('a', '1'), ('b', '2')]
[('c', '3'), ('d', '4')]

但我得到了以下错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    parsed = list([ast.literal_eval(x) for x in string])
  File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 37, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    [
    ^
SyntaxError: unexpected EOF while parsing

Tags: 字符串代码textinpyforstringeval
2条回答
import ast 

text_file = open('text_file.txt', 'r')

for string in text_file:
    print ast.literal_eval(string)

您需要对字符串本身应用ast.literal_eval函数。不需要遍历字符串的内容。

with open('file') as f:
    for string in f:
        parsed = ast.literal_eval(string.strip())
        print parsed

输出:

["('a', '1')", "('b', '2')"]
["('c', '3')", "('d', '4')"]

import re
with open('file') as f:
    for string in f:
        print re.findall(r"\('([^']*)',\s*'([^']*)'\)", string)

输出:

[('a', '1'), ('b', '2')]
[('c', '3'), ('d', '4')]

相关问题 更多 >