【问题标题】:Read several lists from the text file properly python从文本文件中正确读取几个列表 python
【发布时间】:2016-04-02 21:50:24
【问题描述】:

我有一个包含 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”。本次活动不仅针对第一名单,还针对所有名单。

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

谢谢,

艾萨克

【问题讨论】:

    标签: python list numpy genfromtxt


    【解决方案1】:
    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]]
    

    【讨论】:

    • 谢谢帕德莱克。你完美解决了我的问题!
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答。是的,我曾想过删除所有方括号,但看起来会花费太多时间。所以我正在寻找一些更简单的解决方案。
    【解决方案3】:

    它将“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 元素。

    【讨论】:

    • 而不是file.read().split('\n'),你可以做file.readlines()
    • 哦,是的。更常见的习惯用法是使用 strip 摆脱 \n 但我想这并不比您的解决方案更好。顺便说一句,您使用 readlines 而不是 read 的原因是文件太大而无法放入内存。
    • aaah 很好,我会稍微编辑一下然后开始使用 readlines,尤其是对于大文件 :) 你知道内存限制吗?或者我猜每台机器可能都不一样......
    • 如果你使用 64 位 python,那么内存限制就是你的机器的内存,如果你是 32 位,那么我认为它大约是 2-4 GB
    • @rofls:感谢您的回答。我按照你的建议做了,但是我得到了“data.append(eval(line)) File "", line 0 ^ SyntaxError: unexpected EOF while parsing”的错误。所以我在'd'中打印了所有数据。所以,我可以在这个复杂列表的末尾找到一些空字符串:.... 324.18277040240207, 324.09177971086382]', '']。你对此有什么想法吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多