2011-10-22 14 views
4

次のコードを書いて、圧縮されたディレクトリの中のテキストファイルを読みました。私は出力をバイトで欲しくないので、出力を文字列として表示するためにTextIOWrapperを追加しました。これがzipファイルを1行ずつ読み込む正しい方法であると仮定すると(それがわからない場合)、なぜ出力は空白行を出力しますか?それを取り除く方法はありますか?TextIOWrapperを使ったpython zipfileモジュール

import zipfile 
import io 

def test(): 
    zf = zipfile.ZipFile(r'C:\Users\test\Desktop\zip1.zip') 
    for filename in zf.namelist(): 
     words = io.TextIOWrapper(zf.open(filename, 'r')) 
     for line in words: 
      print (line) 
    zf.close() 

test() 

>>> 
This is a test line... 

This is a test line... 
>>> 

The two lines in the file inside of the zipped folder are: 
This is a test line... 
This is a test line... 

ありがとうございます!

答えて

4

zipfile.openは、キャリッジリターン(すなわち '\ r')を取り除かないバイナリモードでZIPファイルを開きます。また、テストではTextIOWrapperのどちらのデフォルトも実行しませんでした。 (すなわちnewline=None)ユニバーサル改行を使用するようにTextIOWrapperを設定してみてください。

import zipfile 
import io 

zf = zipfile.ZipFile('data/test_zip.zip') 
for filename in zf.namelist(): 
    with zf.open(filename, 'r') as f: 
     words = io.TextIOWrapper(f, newline=None) 
     for line in words: 
      print(repr(line)) 

出力:

'This is a test line...\n' 
'This is a test line...' 

Pythonでラインでファイルを反復正常な動作が終わりに改行を保持することです。 print関数も改行を追加するので、空白行が得られます。ファイルを印刷するには、代わりにprint(words.read())を使用します。または、印刷機能のendオプションを使用することもできます:print(line, end='')

関連する問題