2016-10-31 21 views
1

特定の名前でさまざまなファイルを何度もコピーする必要があり、プロセスを自動化する必要がありました。これは私のPythonコードである:この場合圧縮ファイルをコピーできません

number_of_copies = int(raw_input("enter number of copies ")) 

copy_number = 1 

infile = raw_input("file to be copied ") 
new_file = raw_input("What's the name of the new file?") 
extension = ".fastq" 
indata = open(infile) 

file_to_copy = str(indata.read()) 

while copy_number < number_of_copies: 

    copy = open(new_file + "-" + str(copy_number) + extension, 'w') 
    copy.write(file_to_copy) 
    copy_number = copy_number + 1  

indata.close() 
copy.close() 

私はので、私はそれをハードコーディングしていると私はちょうどそれに応じてスクリプトでその変数を変更私のファイルの拡張子を知っています。 スクリプトは私の.fastqファイル(基本的にはテキストファイル)でうまく動作しますが、fastq.gzファイル(圧縮されている)で試してみると、元のサイズが300Mバイトを超えています。問題は、.gzが圧縮されたファイルだということだと思いますが、これを解決する方法はわかりません。どんな助けでも大歓迎です。

P.S.もちろん、.gzファイルで試してみると、 "extension"変数も変更されます。

ありがとうございます!

+1

このリンクを確認してくださいhttps://docs.python.org/2/library/shutil.html、私は機能shutil.copyfileを使用する方が良いと思います –

+0

これはWindowsでですか? –

+0

はい、ドキュメント 'Windowsでは、ファイル所有者、ACLおよび代替データストリームはコピーされません。 –

答えて

2

コメントに記載されているように、shutilを使用する方が効率的です。

OSがテキストファイルのnewline translationであるため、エラーが発生しています。だから、ここでは、バイナリモードでそれらを開くために必要なすべてのファイルに正しく例えば

open(infile, 'rb') 

open(new_file + "-" + str(copy_number) + extension, 'wb') 

を上記のコードを使用するopenためのPython 2ドキュメントがあります。 this answerには標準ファイルモードの便利なテーブルがあります。

+0

@Faber心配はいりません。私は私の答えに2つのPython 2リンクを追加しました。ところで、2020年以降はPython 2がサポートされないため、Python 3への移行を真剣に考えてください。 –

-1
with open('recipes.tar.gz', 'r') as raw_file: 
    with open('new.gz', 'w') as new_file: 
     new_file.write(raw_file.read()) 

私はあなたの質問は「.gzという」拡張子ファイルを開くので、私はそれを試して、どんな問題が起こっていないことはできないと思います。もちろん、あなたのファイルが非常にレイジーであるなら、別の問題になるでしょう。

関連する問題