解析(解析字典)时意外的EOF

时间:2014-04-21 10:56:35

标签: python parsing dictionary syntax-error

大家好,祝大家好!

我正在研究数据解析器。它必须从网页中提取数据,将其存储在.txt文件中,然后运行一个模块来解析此.txt并创建一个.xls,其数据按我希望的方式排序。

我有三个模块: 一个是“蜘蛛”,只从页面中提取html。 第二个解析html并创建一个包含所有必需数据的字典。 第三个从dict中提取数据并从中创建一个.xls。

每个模块都可以自行运行。我的意思是,如果我手动逐一执行它,我不会得到任何错误。 问题是当我让这个过程自动进行(从第一个模块调用第二个模块而从第二个模块调用第三个模块)时,它会在最后调用时崩溃:

Traceback (most recent call last):
  File "/home/desprit/Documents/Python/examples/pg_parsing/data_parser.py", line 296, in <module>
    data_parser('verona')
  File "/home/desprit/Documents/Python/examples/pg_parsing/data_parser.py", line 285, in data_parser
    next_step(where)
  File "/home/desprit/Documents/Python/examples/pg_parsing/data_parser.py", line 292, in next_step
    save_to_excel_01.save_to_excel(where)
  File "/home/desprit/Documents/Python/examples/pg_parsing/save_to_excel_01.py", line 39, in save_to_excel
    imported_data = ast.literal_eval(imported_data)
  File "/usr/lib/python2.7/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/lib/python2.7/ast.py", line 37, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 0

    ^
SyntaxError: unexpected EOF while parsing

我已经检查过所有内容,并且谷歌上搜索了两天试图找出该做什么但没有做任何事情。

以下是模块的链接:

data_parser.py ---&gt; http://codepad.org/nPH3LEay

save_to_excel.py ---&gt; http://codepad.org/9kQ0IzKs

我还附上了data_parser.py ---&gt;生成的dict示例。 the_same_domain_as_above / XYPWMcgB

正如我所看到的,当 ast.literal_eval()开始解析词典时,会出现意想不到的EOF。 但是wtf? Dict只是ookay。同时我在WORKS上手动执行save_to_excel.py!

很抱歉模块中有这么多东西。我几周前开始学习python并且仍然犯了很多错误 - .-

如果有人设法帮助我,我会感到高兴! 谢谢你的时间!

P.S。 我在这里添加一部分代码(我不太确定)导致问题:

imported_file = open('pg_database/' + where + '/converted/' + file)
imported_data = imported_file.read()
imported_data = ast.literal_eval(imported_data)

1 个答案:

答案 0 :(得分:2)

好吧,经过一个星期,在处理另一个项目时,我偶然发现了问题所在。考克斯爵士在上面的评论中问我关于编辑字典/元组的问题。但是现在我看到我没有得到他的问题。

data = open('name.txt')
data = data.read()
converted_data = ast.literal_eval(data)

如果您在同一代码中编辑name.txt并且DIDNT关闭()它,则会导致EOL错误。假设你有一个元组,你将它存储在文件中:

saver = open('name.txt', 'w')
saver.write(str(our_tuple))
saver.close()   # you HAVE TO close it before opening it and calling ast.literal_eval on it's data. Otherwise you will get a EOL error.