запустите команду cp, чтобы сделать копию файла или изменить имя файла в Python

В python 2.7.2 мне нужно сделать копию файла в Linux.

новый файл = "имяЧасть1" + словарь[ключ] + "имяЧасть2"

os.system("cp cfn5e10_1.lp новый файл")

Но новый файл нельзя заменить его правильной строкой.

сообщения на форуме не могут помочь.

Любая помощь очень ценится.


person user1002288    schedule 20.07.2012    source источник
comment
Вы уверены, что так звоните os.system? Потому что он собирается скопировать исходный файл в файл с именем newfile (а не в то, что он говорит в переменной newfile)   -  person BorrajaX    schedule 20.07.2012
comment
Гораздо лучше спросить, как лучше копировать или переименовывать файлы в Python, чем спрашивать, как использовать cp или mv из Python.   -  person Charles Duffy    schedule 20.07.2012


Ответы (3)


Используйте shutil.copyfile для копирования файла вместо os.sytem, в этом нет необходимости для создания нового процесса, и он будет автоматически обрабатывать имена файлов с необычными символами, например. пробелы -- os.system просто передает команду в оболочку, и оболочка может разбить имена файлов, в которых есть пробелы, помимо других возможных проблем.

Например:

newfile = "namePart1" + dictionary[key] + "namePart2"
shutil.copyfile("cfn5e10_1.lp", newfile)
person Adam Rosenfield    schedule 20.07.2012
comment
К сожалению, это не будет работать для всех типов файлов. Например, отформатированный xls не сохранит свое форматирование при использовании copyfile. Однако для ОП это должно сработать. - person Red-Tune-84; 02.07.2017
comment
@Kazanz: Ммм, что? Какое отношение имеют отформатированные документы Excel? Можете быть более конкретными? shutil.copyfile скорее всего, не будет копировать альтернативные потоки данных файла, если они есть , но я не знаю об использовании альтернативных потоков данных файлами Excel. - person Adam Rosenfield; 10.07.2017
comment
Да вы правы. shutil.copyfile - это решение, OP должен просто знать о том, что он не будет копировать метаданные файла. См. предупреждение здесь. На платформах POSIX это означает, что владелец файла и группа теряются, а также списки управления доступом. В Mac OS вилка ресурсов и другие метаданные не используются. Это означает, что ресурсы будут потеряны, а тип файла и код создателя будут неправильными. В Windows владельцы файлов, списки управления доступом и альтернативные потоки данных не копируются — python docs - person Red-Tune-84; 10.07.2017

Это не заменит newfile вашей переменной.

os.system("cp cfn5e10_1.lp newfile")

Вам нужно объединить переменную в конец строки следующим образом:

os.system("cp cfn5e10_1.lp " + newfile)
person Daniel Li    schedule 20.07.2012
comment
Это небезопасно как дано - это не предотвращает разбиение строки newfile на несколько слов, например, если оно содержит пробелы. - person Charles Duffy; 20.07.2012
comment
Пожалуйста, оставьте пробелы типа os.system("cp " + given_dir + " " + out_dir) - person Cloud Cho; 23.06.2018

Если вы хотите вызвать cp из Python, используйте модуль subprocess:

subprocess.call(["cp", "cfn5e10_1.lp", "newfile"])

Но лучше вместо этого использовать функцию из модуля shutil.

person MRAB    schedule 20.07.2012