如何从文件中轻松读取Python内置类型

时间:2014-09-01 23:32:40

标签: python

我有一个文件,其中列出了一些Python内置类型的值:None,整数和字符串,以及正确的Python语法,包括转义。例如,文件可能如下所示:

2 
"""\\nfoo
bar
""" 'foo bar'
None

然后我想将该文件读入值的数组中。对于上面的示例,数组将是:

[2, '\\nfoo\nbar\n', 'foo bar', None]

我可以通过仔细解析和/或使用split函数来做到这一点。

有一种简单的方法吗?

4 个答案:

答案 0 :(得分:2)

我建议您更改文件格式。那就是说,你所拥有的是可以解析的。如果您有像列表这样的多标记值,但只有None,整数和字符串,则可能会更难解析,您可以使用tokenize对输入进行标记,并使用ast.literal_eval之类的内容进行解析:< / p>

import tokenize
import ast

values = []

with open('input_file') as f:
    for token_type, token_string, _, _, _ in tokenize.generate_tokens(f.readline):
        # Ignore newlines and the file-ending dummy token.
        if token_type in (tokenize.ENDMARKER, tokenize.NEWLINE, tokenize.NL):
            continue
        values.append(ast.literal_eval(token_string))

答案 1 :(得分:0)

您可以使用ast.literal_val

>>> import ast

>>> ast.literal_eval('2')
2
>>> type(ast.literal_eval('2')
<type 'int'>

>>> ast.literal_eval('[1,2,3]')
[1, 2, 3]
>>> type(ast.literal_eval('[1,2,3]')
<type 'list'>

>>> ast.literal_eval('"a"')
'a'
>>> type(ast.literal_eval('"a"')
<type 'str'>

答案 2 :(得分:0)

这几乎可以让你到达那里,但是由于字符串的工作方式,最终结合了两个字符串:

import ast

with open('tokens.txt') as in_file:
    current_string = ''
    tokens = []
    for line in in_file:
        current_string += line.strip()
        try:
            new_token = ast.literal_eval(current_string)
            tokens.append(new_token)
            current_string = ''
        except SyntaxError:
            print("Couldn't parse current line, combining with next")

tokens
Out[8]: [2, '\\nfoobarfoo bar', None]

问题在于,在Python中,如果你有两个字符串文字彼此相邻,即使你不使用+,它们也会连接,例如:

x = 'string1' 'string2'
x
Out[10]: 'string1string2'

答案 3 :(得分:0)

我为发布我自己的问题的答案而道歉,但看起来,有效的是,我用逗号替换未加引号的空格(包括换行符),然后将[]放在整个事物并导入。