Форум сайта python.su
0
Проблема, наверно имеет простое решение, но я бьюсь полдня и не могу его найти. Программа форматирует текст и создаёт списки с вложенными списками. Это я выгружаю в текстовый файл.
Получается нужный мне формат: [[,],]]
ПРОБЛЕМА: Читаю этот файл в другой программе
f = open('Draw.txt', 'r') Draw=f.read() f.close()
inp = open('Draw.txt', 'r') d = inp.read() a=[] for i in range (len(d)): a.append(d[i]) inp.close()
Офлайн
49
Однострочное выражение: eval
Многострочное выражение: exec
Но так лучше не делать. Гляньте в сторону shelve. Или сразу по-взрослому в сторону SQL или NoSQL баз данных.
Офлайн
0
С таким же успехом: Бамбарбия! и Кергуду! )))
Классный совет! Благодарю!
Я добросовестно проверил , что пишется о eval и не обнаружил связи с моей проблемой. По крайней мере совет точно не для новичка.
Отредактировано Sprouttie (Фев. 24, 2016 11:57:19)
Офлайн
857
SprouttieНельзя списки питона сохранять в файл в виде текста, потому что теоретически отображение списков в питоне может измениться и все такие программы сразу посыпятся.
Программа форматирует текст и создаёт списки с вложенными списками. Это я выгружаю в текстовый файл.
>>> import json >>> >>> json.dumps([[1, 2], [3, 4]]) '[[1, 2], [3, 4]]' >>> >>> s = _ >>> s '[[1, 2], [3, 4]]' >>> >>> json.loads(s) [[1, 2], [3, 4]] >>>
>>> import pickle >>> >>> class A(int): pass ... >>> a = A(1) >>> b = A(2) >>> lst = [a, b, a, b] >>> >>> pickle.dumps(lst) b'\x80\x03]q\x00(c__main__\nA\nq\x01K\x01\x85q\x02\x81q\x03h\x01K\x02\x85q\x04\x81q\x05h\x03h\x05e.' >>> >>> pickle.loads(_) [1, 2, 1, 2] >>> >>> obj = _ >>> obj[0] 1 >>> type(obj[0]) <class '__main__.A'> >>>
Отредактировано py.user.next (Фев. 24, 2016 11:24:21)
Офлайн
72
py.user.nextЯ дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)
Нельзя списки питона сохранять в файл в виде текста, потому что теоретически отображение списков в питоне может измениться и все такие программы сразу посыпятся.
Офлайн
221
PooH
а если астероид упадет на Землю, то до списков никому не будет дела…я к тому что бессмысленно подобные изречения выдавать. Мы все общаемся в рамках разумного, синтаксис списков менять не зачем, предположу что даже гипотетически.
Модуль json решит проблемы.
Офлайн
0
Можешь использовать модуль jsonСпасибо! То,что надо! О кодировании и декодировании через этот модуль прочитал здесь:
Офлайн
857
PooHИмеется в виду repr() и str().
Я дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)
>>> class A: pass ... >>> lst = [1, 2, A()] >>> >>> str(lst) '[1, 2, <__main__.A object at 0xb73cf0cc>]' >>> >>> eval(_) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1 [1, 2, <__main__.A object at 0xb73cf0cc>] ^ SyntaxError: invalid syntax >>>
Отредактировано py.user.next (Фев. 25, 2016 02:01:29)
Офлайн
72
JOHN_16в сообщении py.user.next предполагалась что это возможно. Лопата!
я к тому что бессмысленно подобные изречения выдавать. Мы все общаемся в рамках разумного, синтаксис списков менять не зачем, предположу что даже гипотетически.
Отредактировано PooH (Фев. 25, 2016 09:02:15)
Офлайн
72
py.user.nextДа я понял, просто пошутил
PooH
Я дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)
Имеется в виду repr() и str().
Офлайн