我有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
答案 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