2014-02-07 2 views
0

У меня есть список, содержащий множество кортежей, и хранится в streaming_cfgкак сбросить кортежи в список в текстовый файл в Python

и попытался сбросить в текстовый файл DEBUG_STREAMING_CFG_FILE

однако это пустая файл ничего не содержит. Почему?

debug_file = open(DEBUG_STREAMING_CFG_FILE,'w') 
    for lst in streaming_cfg: 
     print(lst) 
     debug_file.write(' '.join(str(s) for s in lst) + '\n') 
    debug_file.close 

streaming_cfg

[('0', '0', 'h264', '1/4', '1280x1024', '10', 'vbr', '27', '8m'), 
('0', '0', 'h264', '1/4', '1280x1024', '10', 'cbr', '6m', 'framerate'), 
('0', '0', 'h264', '1/4', '1280x1024', '10', 'cbr', '6m', 'imagequality'), 
('0', '0', 'h264', '1/4', '1280x1024', '10', 'cbr', '8m', 'framerate'), 
('0', '0', 'h264', '1/4', '1280x1024', '10', 'cbr', '8m', 'imagequality'), 
('0', '0', 'h264', '1/4', '2560x1920', '8', 'vbr', '27', '8m'), 
('0', '0', 'h264', '1/4', '2560x1920', '8', 'cbr', '6m', 'framerate'), 
('0', '0', 'h264', '1/4', '2560x1920', '8', 'cbr', '6m', 'imagequality'), 
('0', '0', 'h264', '1/4', '2560x1920', '8', 'cbr', '8m', 'framerate'), 
('0', '0', 'h264', '1/4', '2560x1920', '8', 'cbr', '8m', 'imagequality'), 
('0', '0', 'mjpeg', '1/2', '1280x1024', '10', 'vbr', '25', '4m'), 
('0', '0', 'mjpeg', '1/2', '1280x1024', '10', 'cbr', '6m', 'imagequality'), 
('0', '0', 'mpeg4', '1/2', '1280x1024', '10', 'vbr', '28', '6m'), 
('0', '0', 'mpeg4', '1/2', '1280x1024', '10', 'cbr', '3m', 'imagequality')] 
+0

Вы должны _call_ в '.close()' метод в скобках: ' debug_file.close() '. – senshin

ответ

2

Вы на самом деле не вызывая close, у вас есть всего лишь выражение, которое вычисляет отзывной объекта.

Заменить последнюю строку на

debug_file.close() 

Кстати, ошибки, как это можно предотвратить в современном питона с использованием context managers:

with open(DEBUG_STREAMING_CFG_FILE,'w') as debug_file: 
    for lst in streaming_cfg: 
     print(lst) 
     debug_file.write(' '.join(str(s) for s in lst) + '\n') 
+0

Из любопытства --- когда контрольный счетчик опускается до нуля или переводчик отключается, интерпретатор вызывает 'close()' на каждом объекте 'файл'? (Возможно, OP вызывается 'exit (2)' для выключения интерпретатора.) – nodakai

+0

http://stackoverflow.com/questions/1834556/does-a-file-object-automatically-close-when-its-reference-count- hits-zero – filmor

+0

И если вы назовете 'exit', вы окажетесь на милость' libc', я бы предположил. – filmor

0

Современные Python:

with open(DEBUG_STREAMING_CFG_FILE, "w") as f: 
    for lst in streaming_cfg: 
     print(' '.join(str(s) for s in lst), file=f) 

Не нужно закрывать открытый файл.

0

Вы не звонили close(), но если вы используете более простую with статью, вы не должны либо:

with open(DEBUG_STREAMING_CFG_FILE, 'w') as f: 
    for lst in streaming_cfg: 
     print(lst) 
     f.write(' '.join(str(s) for s in lst) + '\n') 
Смежные вопросы