2016-10-31 65 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文件(壓縮)上進行嘗試時,副本的大小爲1kb(原始大小爲300 Mb)。我相信問題是,.gz是一個壓縮文件,但我不知道如何解決這個問題。任何幫助是極大的讚賞。

p.s.當然,當我使用.gz文件進行嘗試時,我也更改了「擴展」變量。

預先感謝您!

+1

檢查此鏈接https://docs.python.org/2/library/shutil.html,我認爲更好使用功能shutil.copyfile –

+0

這是在Windows上嗎? –

+0

是的,取自文檔'在Windows上,文件所有者,ACL和備用數據流不被複制。' –

回答

2

正如評論中指出的那樣,使用shutil更有效。

由於您的操作系統對文本文件執行了newline translation操作,因此出現錯誤。因此,要正確地使用上面的代碼你需要以二進制方式打開它們的所有文件,如

open(infile, 'rb') 

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

這裏是Python的2文檔的openthis answer有一個標準文件模式的便利表格。

+0

@Faber不用擔心。我已經添加了幾條Python 2鏈接到我的答案。順便說一句,你應該認真考慮轉向Python 3,因爲在2020年之後Python 2將不被支持。 –

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

我覺得你的問題是無法打開「廣州」延期文件,所以我儘量吧,不會發生任何問題。當然,如果你的文件非常大,這將是另一個問題。