5

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

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.     ]

我想将这些数据读入二维数组。我已经搜索并尝试了各种方法,例如 pickle、eval、json 等,但没有任何效果

4

4 回答 4

7

如果您正在使用numpy(或不介意使用它),您可以使用numpy.loadtxt('tarfile.txt', usecols=range(1,8)). 如果您numpy无论如何都希望将数据保存在二维数组中,那就太好了。

于 2012-10-23T13:53:13.483 回答
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.
于 2012-10-23T13:47:17.063 回答
2

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

要读取这样的文件,请去掉[and ],拆分每一行,并将每个字段映射到一个浮点实例。

records = []
for line in f:
    record = [float(field) for field in line.strip().lstrip('[').rstrip(']').split()]
    records.append(record)
于 2012-10-23T13:44:18.080 回答
1

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

import re
pattern = r'\d+.\d*'
array = []
for line in open('tarfile.txt'):
    array.append(re.findall(pattern, line))
于 2012-10-23T13:52:56.453 回答