2016-10-31 2 views
1

Мне нужно несколько раз копировать различные файлы с определенным именем, и я хотел, чтобы процесс был автоматизирован. Это мой питон код:Невозможно скопировать сжатые файлы

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, я также изменяю переменную «extension».

Заранее благодарю вас!

+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 Документы для open. И у this answer есть удобная таблица стандартных файловых режимов.

+0

@Faber Не беспокойтесь. Я добавил пару ссылок Python 2 на мой ответ. Кстати, вам стоит серьезно подумать о переходе на Python 3, потому что Python 2 не будет поддерживаться после 2020 года. –

-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» расширение файла, поэтому я стараюсь его, не произошло каких-либо проблем. Конечно, если ваш файл очень ярок, это будет еще одна проблема.

Смежные вопросы