将txt文件转换为未引用的列表使用Python

12 浏览
0 Comments

将txt文件转换为未引用的列表使用Python

我想要得到这个形式的表单:\n

[(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')]

\n但我得到的是这个:\n

["(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')"]

\n这是我的代码:\n

def openRLEFile():
    file = askopenfile(parent=root,title='选择文件')
    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()

0
0 Comments

将txt文件转换为未加引号的列表是一个常见的需求,可以使用Python中的eval函数来实现。eval函数可以将字符串转换为Python元组,例如eval("(1, ' ')")将返回(1, ' ')。在你的情况下,可以使用列表推导式将文件中的每一行字符串转换为元组:

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

然而,为了代码的安全性,建议使用ast模块中的literal_eval函数来替代eval函数:

import ast

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

这样可以避免使用eval函数时可能出现的安全问题。eval函数会将字符串作为代码进行执行,如果文件中包含恶意代码,eval函数会执行该代码,从而导致安全风险。

因此,不建议在文件内容上直接使用eval函数,建议对文件内容进行严格的安全检查。如果从未知来源获取文件内容,尤其需要谨慎对待,避免不明代码的执行。

总之,使用eval函数将txt文件内容转换为未加引号的列表可以实现,但需要注意安全性问题。推荐使用ast模块中的literal_eval函数来代替eval函数,以提高代码的安全性。在处理文件内容时,应谨慎对待,避免执行可能存在安全风险的代码。

0
0 Comments

问题:将txt文件转换为未加引号的列表。

原因:使用eval()函数可以方便地解决问题,但出于安全考虑,通常不建议使用该函数。

解决方法:可以通过手动处理来解决问题。首先定义一个函数my_process(x),该函数的作用是将字符串x进行处理,去掉首尾的括号并按逗号和空格进行分割,然后返回一个元组。接下来,使用列表推导式将文件中的每一行字符串都进行处理,并将处理后的结果存入一个列表中。

以下是具体的代码实现:

def my_process(x):
    x = x[1:-1]  # 去除首尾的括号
    x = x.split(", ")  # 按逗号和空格进行分割
    return (int(x[0]), x[1])
content = [my_process(x.strip('\n')) for x in file]

通过这种方法,可以将txt文件中的内容转换为未加引号的列表。

0