从文件导入元组

时间:2017-11-07 04:35:30

标签: python

我的.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(',')))

(最后一行代码来自不同的帖子,但不起作用)

4 个答案:

答案 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]