2014-02-07 51 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- hit-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') 
相關問題