Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 9, 2016 19:48:34

Sprouttie
Зарегистрирован: 2014-10-01
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из файла

Проблема, наверно имеет простое решение, но я бьюсь полдня и не могу его найти. Программа форматирует текст и создаёт списки с вложенными списками. Это я выгружаю в текстовый файл.
Получается нужный мне формат: [[,],]]
ПРОБЛЕМА: Читаю этот файл в другой программе

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()
Но там полное издевательство: Как в песне у Высоцкого: “Каждый член у меня расфасованный…”
каждый элемент в отдельных кавычечках…
СПАСИТЕ!

Офлайн

#2 Фев. 9, 2016 20:13:08

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Чтение из файла

Однострочное выражение: eval
Многострочное выражение: exec
Но так лучше не делать. Гляньте в сторону shelve. Или сразу по-взрослому в сторону SQL или NoSQL баз данных.

Офлайн

#3 Фев. 24, 2016 09:55:58

Sprouttie
Зарегистрирован: 2014-10-01
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из файла

С таким же успехом: Бамбарбия! и Кергуду! )))
Классный совет! Благодарю!
Я добросовестно проверил , что пишется о eval и не обнаружил связи с моей проблемой. По крайней мере совет точно не для новичка.

Отредактировано Sprouttie (Фев. 24, 2016 11:57:19)

Офлайн

#4 Фев. 24, 2016 11:17:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Чтение из файла

Sprouttie
Программа форматирует текст и создаёт списки с вложенными списками. Это я выгружаю в текстовый файл.
Нельзя списки питона сохранять в файл в виде текста, потому что теоретически отображение списков в питоне может измениться и все такие программы сразу посыпятся.
Можешь использовать модуль json, он похож на списки.

>>> 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]]
>>>

Для полной сериализации (с любыми объектами) используй модуль pickle.
>>> 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)

Офлайн

#5 Фев. 24, 2016 12:39:42

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Чтение из файла

py.user.next
Нельзя списки питона сохранять в файл в виде текста, потому что теоретически отображение списков в питоне может измениться и все такие программы сразу посыпятся.
Я дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Фев. 24, 2016 13:26:17

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Чтение из файла

PooH
а если астероид упадет на Землю, то до списков никому не будет дела…я к тому что бессмысленно подобные изречения выдавать. Мы все общаемся в рамках разумного, синтаксис списков менять не зачем, предположу что даже гипотетически.
Модуль json решит проблемы.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Фев. 24, 2016 13:57:05

Sprouttie
Зарегистрирован: 2014-10-01
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из файла

Можешь использовать модуль json
Спасибо! То,что надо! О кодировании и декодировании через этот модуль прочитал здесь:
модуль json.

Офлайн

#8 Фев. 25, 2016 01:58:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Чтение из файла

PooH
Я дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)
Имеется в виду repr() и str().

То, что eval() преобразует обратно строковое представление списка, нигде не определено.
>>> 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
>>>
Допустим, мы видим, что список в строковом представлении начинается с квадратной скобки, но где это определено? А почему он не может начинаться с какой-нибудь последовательности типа “list(” ?
Поэтому программы, которые опираются на строковое представление списка и используют его для точного представления данных, рискуют попасть в эпоху изменений, где кто-нибудь скажет “давайте поменяем представления, у нас стало больше разновидностей обычных списков”.



Отредактировано py.user.next (Фев. 25, 2016 02:01:29)

Офлайн

#9 Фев. 25, 2016 09:01:14

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Чтение из файла

JOHN_16
я к тому что бессмысленно подобные изречения выдавать. Мы все общаемся в рамках разумного, синтаксис списков менять не зачем, предположу что даже гипотетически.
в сообщении py.user.next предполагалась что это возможно. Лопата!



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Фев. 25, 2016 09:02:15)

Офлайн

#10 Фев. 25, 2016 09:01:56

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Чтение из файла

py.user.next
PooH
Я дико извиняюсь, но если синтаксис списков в питоне изменится то посыпятся все программы ;)
Имеется в виду repr() и str().
Да я понял, просто пошутил



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version