2017-08-09 32 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

所以我应该怎么做? –