将txt文件转换为未引用的列表使用Python
将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()
将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函数,以提高代码的安全性。在处理文件内容时,应谨慎对待,避免执行可能存在安全风险的代码。
问题:将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文件中的内容转换为未加引号的列表。