如何从python中的文本文件加载表?

时间:2017-06-19 10:45:26

标签: python

我有16个文本文件,每个文件包含一个表,每个表看起来像这样:

Byte[1]=[1234,3455,7565,2345] 

我想加载每个表以便使用它,文件的名称与byte的数量不同。我使用这些代码行:

import numpy as np
 test=[]
 for b in range(16):
    path= "/local/home/Point_Of_Interest_For_Byte_'+str(b)+'.txt"
    test=np.load(path)
    print(test)

因此,我希望test=[1234,3455,7565,2345],但它给了我这个错误:

"Failed to interpret file %s as a pickle" % repr(file))
IOError: Failed to interpret file '/local/home/Point_Of_Interest_For_Byte_0.txt' as a pickle

2 个答案:

答案 0 :(得分:0)

你应该试试这个:(未经测试)

np.save(path, test)

然后:

test=np.load(path)

编辑:

另一种解决方案可能是首先将文件加载到字符串中:(未经测试)

with f as file.open(path):
  foo = f.readlines()
test = np.load(foo)

编辑:

此解决方案提供最接近的答案,但不是正确答案:

with f as file.open(path):
      foo = f.readlines()
      print(foo)

它提供了这个解决方案:

['Byte[0] =[3836, 3830, 3841, 3824, 3846]\n']
['Byte[1] =[4713, 4718, 4723, 4707, 4699]\n']
['Byte[2] =[1586, 1591, 1580, 1596, 1601]\n']

但我们需要的只是:test= [3836, 3830, 3841, 3824, 3846]

答案 1 :(得分:0)

你的文件包含的既不是有效的python也不是pickle对象,也不是json和csv,也不是我能想到的任何其他标准格式,所以简单的解决方案可能是自己解析它们而不是期待"某些东西&#34 ;神奇地猜猜它应该怎么做。

希望给出您的文件格式描述,解析应该非常简单:获取单个文本行,将其拆分为" ="签名,检索正确的部分(这是列表的有效python语法)并将其传递给ast.literal_eval(),这应该是最安全的:

import ast

def read_list(path):
    with open(path) as f:
        content = f.read()
    try:
        raw_data = content.strip().split("=", 1)[1]
    except IndexError as e:
        raise ValueError("file {} does'nt seem valid (error : {})".format(path, e))
    try:
        data = ast.literal_eval(raw_data)
    except SyntaxError as e:
        raise ValueError("file {} does'nt seem valid (error: {})".format(path), e)
    return data



for b in range(16):
    path = "/local/home/Point_Of_Interest_For_Byte_{}.txt".format(b)
    test = read_list(path)
    print(test)
    print(type(test)) # check we have a list not a string