我的.txt文件:
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
(241, 151, 16)
如何从文本文件中导入这些作为元组而不是字符串
我目前的情况:
save_file = open('save.txt', 'r');
if os.stat('save.txt').st_size != 0:
for lines in save_file:
_var = tuple(map(float, save_file.readline().split(',')))
(最后一行代码来自不同的帖子,但不起作用)
答案 0 :(得分:1)
将此数据转换为元组列表的安全方法是使用ast.literal_eval():
import ast
with open('save.txt') as f:
result = list(map(ast.literal_eval, f))
答案 1 :(得分:1)
一些错误:
for lines in save_file:
它不是“行”它是一行,你一次迭代一行。
其次,您正在使用save_file.readline()
而不是使用您正在迭代的行。
第三,当你解析一个看起来像line = '(241, 151, 16)'
的字符串时,你应该从字符串的开头和结尾删除括号:
line = line[1:-1]
你不仅要用逗号分隔,还要用逗号和后面的空格分割:
line.split(', ')
让我们把它放在一起:
for line in save_file:
line = line[1:-1]
_var = tuple(map(float, line.split(', ')))
答案 2 :(得分:0)
这可以用更酷的方式完成,请参阅@Raymond的回答,但我已经按照你所做的一直到现在为止。
您应该阅读该文件并使用literal_eval()模块中的ast方法。
import os
import ast
save_file = open('save.txt', 'r');
if os.stat('save.txt').st_size != 0:
for line in save_file.readlines():
a_tuple = ast.literal_eval(line.strip())
print a_tuple, type(a_tuple)
每行都有\n
,因此我使用strip()删除了它。
答案 3 :(得分:-1)
您的代码有误,因为"(241, 151, 16)".split(",")
为["(241", " 151", " 16)"]
您可以使用re
库:
import re
# with `content` is list of row
list_of_tuple = [tuple(map(int, re.findall("\d+", text))) for text in content]