2017-06-19 64 views
1

我有16個文本文件,每個文件都包含一個表,每個表看起來是這樣的:如何從python中的文本文件加載表?

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

我要加載的每個表才能使用它,文件不同,在他們的名字只是字節的數量。我使用這些代碼行:

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

你守LD試試這個:(未經測試)

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]

+0

這是我做的已經 –

+0

但我不能加載一個文本文件 –

+0

你調用'np.save(路徑測試)'函數? – RyanU

0

您的文件包含了哪些既不是有效的Python,也不是醃製的對象,也不是json,csv,也不是我能想到的任何其他標準格式,所以簡單的解決方案可能是自己解析它們,而不是期待「某些東西」神奇地猜測它應該如何處理它們。

希望給你的文件格式描述解析應該很簡單:獲取單個文本行,將它拆分爲「=」符號,檢索正確的部分(這是一個列表有效的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 
+0

它給了我這個錯誤:data = ast。literal_eval(raw_data) NameError:未定義全局名稱'ast' –

+0

您當然需要導入ast模塊,對不起,我認爲這足夠明顯;-) –

+0

已將ast導入添加到片段。 –