2017-08-09 146 views
0

我有問題。這些是我有的大text.txt文件的前幾行:https://pastebin.com/UV7UiU5M,我需要打開它作爲一個字典來迭代它,並獲得值。我試着用如何在python中將文本文件打開爲dict?

for line in open('/home/conacons/Documents/products_with_stocks.txt'): 
    name = line.split() 
    for i in name[0:2]: 
     print i 

,我也得到:

{ 
'BranchId': 
'1', 
'ArticleId': 
'50375476', 
'EAN': 
'4029044771246', 
    'Price': 
Decimal('299.95000'), 
'Stock': 
    Decimal('1.00000'), 
    'ReservedStock': 
Decimal('0'), 
'LastMove': 
datetime.datetime(2017, 
}, 

,但它不是迭代,我不能使用的值。

編輯:

我得到了一段代碼來寫入文件。它看起來像這樣:

for n in range(0,650): 
    req['IterationConstraints']['BlockIndex'] = n 
    articles = client.service.GetArticles(req) 
    f.write(str(articles)) 
+0

只是一個想法,也許'eval'函數工作,如果你把該輸入作爲一個字符串。 – silgon

+2

這個文本文件的來源是什麼?您應該使用某種現有的支持格式(例如「JSON」或「pickle」)對您的數據進行序列化。相反,它看起來像有人把一些嵌套的'dict'的漂亮輸出轉儲到文本文件。這不是你應該做的*。使用'eval'解決一些解決方案非常簡單,但首先你不應該處於這個位置,但是你必須將正確的類型導入到全局名稱空間中,比如'Decimal'和'datetime .datetime' –

+1

還有一個'json解碼器',你可以檢查,因爲你試圖讀取的格式似乎是一個json – silgon

回答

-2

嘗試在.txt文件添加一個名稱到您的字典......然後,你可以重命名os.rename()祖doesnt_matter.py的文件,然後你可以從doesnt_matter做進口dictname

0

首先,你需要一個有效的JSON的日期時間是錯誤的:

{ 'BranchId': '1', '條款ArticleID': '50375476', 'EAN': 「 4029044771246', '價格': 十進制( '299.95000'), '庫存': 十進制( '1.00000'), 'ReservedStock': 十進制( '0'), 'LastMove': datetime.datetime(2017,12,12) }

然後,用下面的腳本,我可以評價文件作爲字典:

import datetime 
from decimal import Decimal 

with open('file2.txt') as json_file: 
    eval(json_file.read()) 

#{'ReservedStock': Decimal('0'), 'EAN': '4029044771246', 'Price': Decimal('299.95000'), 'BranchId': '1', 'LastMove': datetime.datetime(2017, 12, 12, 0, 0), 'ArticleId': '50375476', 'Stock': Decimal('1.00000')} 

你需要的,如果你想EVAL它的文件模型爲JSON或JSON的列表。在這個paste你有正確的格式文件

+0

我的文件是有效的,缺少datetime的是我的錯誤輸出(未成功)。所以,現在我想你的代碼從上面得到:回溯(最近通話最後一個): 文件 「/root/looping_futura_stocks.py」,第11行,在 I =的eval(json_file.read()) 文件「 」 31行 } { ^ 語法錯誤:無效的語法 過程完成,退出代碼爲1 –

+0

正如我所說的,如果你有字典的名單,你需要它建模爲一個列表。 [{'a':1},{'a':2}],你現在的格式是一個有效的字典,但是它們都不是一個有效的字典列表。 – mandrewcito

+0

所以我應該怎麼做? –