正确地从文本文件python中读取几个列表

时间:2015-12-29 03:02:42

标签: python list numpy genfromtxt

我有一个包含541个列表的文本文件,每个列表包含280个数字,如下所示:

[301.82779832839964, 301.84247725804647, 301.85718673070272, ..., 324.4056396484375, 324.20379638671875, 324.00198364257812]
                                   .
                                   .
[310.6907599572782, 310.68334604280966, 310.67756809346469,..., 324.23541883368551, 324.18277040240207, 324.09177971086382]

要阅读此文本文件,我使用numpy.genfromtxt制作代码来读取测试的第一个列表,例如:

pt1 = np.genfromtxt(filn1,dtype=np.float64,delimiter=",")
print pt1[0].shape
print list(pt1[0])

我希望我能看到第一个列表的完整列表,但结果列表在第一个和最后一个位置显示“nan”,如下所示:

[nan, 301.84247725804647, 301.85718673070272, ...,  324.4056396484375, 324.20379638671875, nan]

我在numpy.genfromtxt中尝试过其他选项,我找不到为什么它会在列表的第一个和最后一个位置产生'nan'。此事件不仅适用于第一个列表,也适用于所有列表。

任何想法或帮助都会非常感激。

谢谢,

艾萨克

3 个答案:

答案 0 :(得分:2)

import numpy as np
from ast import literal_eval
pt1 = np.array(map(literal_eval,open("in.txt")))

有关:

[301.82779832839964, 301.84247725804647, 301.85718673070272,  324.4056396484375, 324.20379638671875, 324.00198364257812]
[310.6907599572782, 310.68334604280966, 310.67756809346469, 324.23541883368551, 324.18277040240207, 324.09177971086382]

你会得到:

[[ 301.82779833  301.84247726  301.85718673  324.40563965  324.20379639
   324.00198364]
 [ 310.69075996  310.68334604  310.67756809  324.23541883  324.1827704
   324.09177971]]

答案 1 :(得分:1)

它将'nan'应用于文件中的[]。作为最后的手段,你可以做这样的事情:

data = []
d = file('filn').read().split('\n')
for line in d:
    if line:
        data.append(eval(line))
data = np.asarray(data)

或者,您可以替换整个文件的[],然后就可以像以前一样使用np.genfromtxt(filn1,dtype=np.float64,delimiter=","),而无需获取nan元素。< / p>

答案 2 :(得分:1)

看起来问题是由文本文件中的方括号引起的;最简单的解决方案是从文件中删除这些字符,或者只是在文本编辑器中使用find-replace,或者如果文件太大,可以使用sed之类的命令行工具。