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

时间:2012-10-23 13:40:02

标签: python file-io

出于某种原因,我决定将我的数据列表保存为字符串。如果我使用

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 个答案:

答案 0 :(得分:5)

如果您使用的是numpy(或者不介意使用它),则可以执行numpy.loadtxt('tarfile.txt', usecols=range(1,8))。如果您希望将数据放在2-d numpy数组中,那就特别好了。

答案 1 :(得分:2)

我的猜测是你的输入文件包含由空格分隔的浮点数。

要阅读此类文件,请删除[],拆分每一行,并将每个字段映射到一个浮动实例。

records = []
for line in f:
    record = [float(field) for field in line.strip().lstrip('[').rstrip(']').split()]
    records.append(record)

答案 2 :(得分: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.

答案 3 :(得分:0)

我认为regexp是解析数据的最佳方式:

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