将数据文件读入列表或数组的Python方法

6
由于某些原因,我决定将我的数据列表保存为一个字符串。如果我使用

f = open('tarfile.txt')
for line in f.readlines():
    print line
f.close()

我的输出结果如下:
[  53.7775   13.4375   26.525    48.63    125.      185.      653.    ]    
[  53.7775    13.33625   26.73375   48.68375  125.       185.       653.     ]    
[  53.7775    13.325     27.11375   48.8875   126.       187.       653.     ]    
[  53.7775    13.43625   27.3175    48.92875  126.       187.       653.     ]    
[  53.7775    14.4825    33.07375   51.7325   141.       202.       595.     ]

我希望能够将这些数据读入到2D数组中。我已经搜索并尝试了各种方法,例如pickle、eval、json等,但都没有成功。
4个回答

7

如果您正在使用numpy(或不介意使用它),您可以执行numpy.loadtxt('tarfile.txt', usecols=range(1,8))。如果您要将数据放在2-d numpy数组中,这尤其方便。


非常感谢。正是我所需要的。运行得非常完美。 - user1532056

2
我猜你的输入文件包含由空格分隔的浮点数。
为了读取这样的文件,请去掉[],拆分每一行,并将每个字段映射到一个浮点实例。
records = []
for line in f:
    record = [float(field) for field in line.strip().lstrip('[').rstrip(']').split()]
    records.append(record)

2

首先,您需要将[]翻译成Python可以处理的内容:

import string
table = string.maketrans('[]','  ')

现在您可以遍历文件,进行翻译、拆分和浮动操作:
for line in f:
    print [float(x) for x in line.translate(table).split()]

如果保证[是行首字符,]是行尾字符,你可以使用切片来完成:

print [float(x) for x in line[1:-2].split()]  #-2 accounts for the newline too.

1

我认为正则表达式是解析数据的最佳方式:

import re
pattern = r'\d+.\d*'
array = []
for line in open('tarfile.txt'):
    array.append(re.findall(pattern, line))

这很清晰有帮助,也回答了我的数组问题。 - Carl Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接