Python 正确读取文本文件中的多个列表

Python 正确读取文本文件中的多个列表,python,list,numpy,genfromtxt,Python,List,Numpy,Genfromtxt,我有一个文本文件,其中有541个列表,每个列表有280个数字,如下所示: [301.82779832839964, 301.84247725804647, 301.85718673070272, ..., 324.4056396484375, 324.20379638671875, 324.00198364257812] . . [310.690759957

我有一个文本文件,其中有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]
[nan, 301.84247725804647, 301.85718673070272, ...,  324.4056396484375, 324.20379638671875, nan]
为了读取此文本文件,我使用numpy.genfromtxt生成代码来读取测试的第一个列表,例如:

pt1 = np.genfromtxt(filn1,dtype=np.float64,delimiter=",")
print pt1[0].shape
print list(pt1[0])
我希望我能看到第一个列表的完整列表,但结果列表在第一个和最后一个位置显示“nan”,如下所示:

[301.82779832839964, 301.84247725804647, 301.85718673070272, ..., 324.4056396484375, 324.20379638671875, 324.00198364257812]
                                   .
                                   .
[310.6907599572782, 310.68334604280966, 310.67756809346469,..., 324.23541883368551, 324.18277040240207, 324.09177971086382]
[nan, 301.84247725804647, 301.85718673070272, ...,  324.4056396484375, 324.20379638671875, nan]
我在numpy.genfromtxt中尝试了其他选项,我找不到为什么它会在列表的第一和最后一位出现“nan”。此事件不仅针对第一个列表,而且针对所有列表

任何想法或帮助都将不胜感激

谢谢,


Isaac

它正在对文件中的
[
]
应用“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
元素。

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

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

您将获得:

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

您只需执行
file.readlines()
即可,而不必执行
file.read().split('\n')
)。更常见的习惯用法是使用
strip
来摆脱
\n
,但我认为这并不比您的解决方案好多少。顺便说一句,如果文件太大而无法放入内存,你会使用readlines而不是read。啊啊,很好,我会先编辑一下,然后开始使用readlines,特别是对于大文件:)你知道内存限制吗?或者我猜每台机器的内存可能不同……如果您使用64位python,那么内存限制就是您的机器拥有的内存,如果您使用32位,那么我认为大约是2-4gb@rofls:谢谢你的回答。我按照你的建议做了,但是我得到了“data.append(eval(line))File”的错误,第0行^SyntaxError:解析时出现意外的EOF”。所以我把所有的数据都打印在“d”中。所以,我可以在这个复杂列表的末尾找到一些空字符串:。。。。324.18277040240207, 324.09177971086382]', '']. 你对此有什么想法吗?谢谢,谢谢你的回答。是的,我想把所有的方括号都去掉,但看起来要花太多时间。所以我正在寻找一些更简单的解决方案。谢谢你,帕德雷克。你完美地解决了我的问题!!