大家好,祝大家好!
我正在研究数据解析器。它必须从网页中提取数据,将其存储在.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)
答案 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.