Проблема здесь в том, что когда вы разделяете на новую строку через \n
, вы также получаете пустые строки в своем выводе, и когда вы пытаетесь запустить ast.literal_eval
на них, они выдают исключение.
Давайте запустим ваш оригинальный код, здесь я храню содержимое в строке, а не в файле.
s = """
[(11.0795, 16), (12.0354, 16)]
[(11.0795, 19), (12.0354, 19)]
[(11.0795, 16), (12.0354, 16)]
"""
import ast
lines = s.split('\n')
xy = ast.literal_eval(str(lines[0].split('"')).strip("[]").strip("'"))
xz = ast.literal_eval(str(lines[1].split('"')).strip("[]").strip("'"))
yz = ast.literal_eval(str(lines[2].split('"')).strip("[]").strip("'"))
print(xy[0])
print(yz[1])
print(xz[0][0])
Теперь я получаю ошибку, которую вы получаете.
Traceback (most recent call last):
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1741, in <module>
main()
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1735, in main
globals = debugger.run(setup['file'], None, None, is_module)
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1135, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/Users/deveshks/PycharmProjects/DevProjects/script.py", line 11, in <module>
xy = ast.literal_eval(str(lines[0].split('"')).strip("[]").strip("'"))
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py", line 46, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 0
^
SyntaxError: unexpected EOF while parsing
Теперь, если я изменю строку, где я делю текст, чтобы игнорировать пустые строки, код работает отлично.
s = """
[(11.0795, 16), (12.0354, 16)]
[(11.0795, 19), (12.0354, 19)]
[(11.0795, 16), (12.0354, 16)]
"""
import ast
lines = [line.strip() for line in s.split('\n') if line.strip() != '']
xy = ast.literal_eval(str(lines[0].split('"')).strip("[]").strip("'"))
xz = ast.literal_eval(str(lines[1].split('"')).strip("[]").strip("'"))
yz = ast.literal_eval(str(lines[2].split('"')).strip("[]").strip("'"))
print(xy[0])
print(yz[1])
print(xz[0][0])
Теперь я получаю вывод
(11.0795, 16)
(12.0354, 16)
11.0795