Форум сайта python.su
0
Формирую список, который состоит из разного типа элементов: списки, строки, словари.
Сохраняю в файл:
with open ('C:\test-check.txt', 'w') as f: st = '::'.join(['%s' % i for i in checklist]) f.write(st) f.close()
with open ('C:\test-check.txt', 'rb') as f1: lines = f1.readlines() f.close() for i in range(len(lines)): line = str(lines[i])[2:-1].split('::') checklist.append([eval(line[j]) for j in range(len(line))])
checklist.append([eval(line[j]) for j in range(len(line))])
Офлайн
20
0. по моему
for line in lines
for line in f1
for i in xrange(len(lines))

>>> import shelve
>>> obj_db = shelve.open('test.db')
>>> test_list = [1,"foo",{'key':'value'},(10,20,30)]
>>> test_list
[1, 'foo', {'key': 'value'}, (10, 20, 30)]
>>> [type(t) for t in test_list]
[<type 'int'>, <type 'str'>, <type 'dict'>, <type 'tuple'>]
>>> obj_db['my_list'] = test_list
>>> obj_db.close()
>>> exit()
>python
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 6
32
Type "help", "copyright", "credits" or "license" for more i
>>> import shelve
>>> db = shelve.open('test.db')
>>> test_list = db['my_list']
>>> test_list
[1, 'foo', {'key': 'value'}, (10, 20, 30)]
>>> [type(t) for t in test_list]
[<type 'int'>, <type 'str'>, <type 'dict'>, <type 'tuple'>]
>>>
Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.
>>> import ast >>> ast.literal_eval('[1,2,3]') [1, 2, 3] >>> ast.literal_eval('{1:10}') {1: 10} >>> ast.literal_eval("open('somefile')") Traceback (most recent call last): ... ValueError: malformed string >>>
Отредактировано EBFE (Июль 20, 2012 17:53:44)
Офлайн
173
EBFEВсе-таки, лучше с контекстным менеджером (with open). В CPython файлы, конечно, закроются сборщиком мусора, а вот в PyPy нет.
Желательно сохранять и восстанавливать “унитарно” - т.е open(…, ‘wb’).write(), open(…,'rb').read()
Отредактировано reclosedev (Июль 20, 2012 18:07:48)
Офлайн
0
EBFE, спасибо. Очень познавательно!
Shelve - порадовал.
Офлайн
20
reclosedevИ в PyPy закроются
а вот в PyPy нет.
. Просто в CPython сам сборщик мусора работает по принципу “reference counter” (подсчет ссылок ?) + cycle detector. A в PyPy “mark&sweep”. Т.е в СPythone как только будет вызован PY_DECREF (на выходе из функции и т.д), а в PyPy когда сборщик “снизойдет” до этого.
Отредактировано EBFE (Июль 20, 2012 19:25:24)
Офлайн