使用python将txt文件转换为未加引号的列表

时间:2016-12-11 05:55:26

标签: python

我想要这个表格

[(1, 'A'), (1, 'd'), (1, 'e'), (1, 'l'), (1, ' '), (1, 'a'), (1, 'n'), (1, 'd'), (1, ' '), (1, 'm'), (1, 'o'), (1, 'h'), (1, 'a'), (2, 'm'), (1, 'e'), (1, 'd')]

但我得到了这个

["(1, 'A')", "(1, 'd')", "(1, 'e')", "(1, 'l')", "(1, ' ')", "(1, 'a')", "(1, 'n')", "(1, 'd')", "(1, ' ')", "(1, 'm')", "(1, 'o')", "(1, 'h')", "(1, 'a')", "(2, 'm')", "(1, 'e')", "(1, 'd')"]

这是我的代码

def openRLEFile():
    file = askopenfile(parent=root,title='Select a File')
    global filename
    filename = file.name
    content = [x.strip('\n') for x in file]
    tDecompressed = decodeRLE(content)
    text.delete(0.0,END)
    text.insert(0.0,tDecompressed)
    file.close()

2 个答案:

答案 0 :(得分:1)

虽然宏杰李提出的eval()方便,但通常不建议将其用于安全目的。

相反,您可以手动处理:

def my_process(x):
    x = x[1:-1] # get rid of brackets
    x = x.split(", ")
    return (int(x[0]), x[1])

然后使用:

content = [my_process(x.strip('\n')) for x in file]

答案 1 :(得分:-2)

使用eval将str转换为python元组,如下所示:

eval("(1, ' ')")

出:

(1, ' ')

在你的情况下:

content = [eval(x.strip('\n')) for x in file]

为了使代码安全,建议使用ast.literal_eval

import ast
content = [ast.literal_eval(x.strip('\n')) for x in file]