2

以下の関数は、PythongzipモジュールのドキュメントにあるPythonサンプルコードに基づいています。デフォルトのPython2.6.xを使用してUbuntu10.04で確実に実行されます。ただし、Ubuntu 11.04では、コードは@で失敗しますwritelines()

1台の11.04マシンで、障害メッセージが報告され'module' object has no attribute 'BufferedIOBase'ました。別の11.04マシンが別のメッセージを報告しましたNo module named numpy。それでも、numpyパッケージは両方のマシンにインストールされています。

これを引き起こす11.04のPython依存関係の欠落やその他の問題を知っている人はいますか?

def _compress(inp,out):
    import gzip
    f_out = gzip.open(out,'wb')
    f_in = open(inp,'rb')
    f_out.writelines(f_in)
    f_out.close()
    f_in.close()
    os.unlink(inp)
4

1 に答える 1

3

エラーメッセージNo module named numpyはこの問題とは関係ありません。他のいくつかのバグがこれを引き起こしています。これを追跡するには、の値をsys.path出力して、Pythonがモジュールを検索するパスを確認します。Numpyはインストールされている可能性がありますが、に含まれている場所にはインストールされていない可能性がありますsys.path。さて、あなたの主な問題に戻りましょう。

  1. Pythonのバージョンを確認してください。私の推測では、11.04には2.7.xが付属しています。

  2. writelines()バイナリデータを呼び出すための奇妙な方法です。さらに悪いことに、パラメータはファイルオブジェクトではなく、文字列のシーケンスである必要があります。代わりにこのコードを試してください:

    f_out.write( f_in.read() )
    
  3. ファイルサイズによっては、これは多くのメモリを消費します。代わりにループを試してください:

    while True:
        data = f_in.read( 10240 )
        if not data: break
        f_out.write( data )
    
于 2012-05-08T10:46:38.093 に答える