exécuter commande cp pour faire une copie d'un fichier ou modifier un nom de fichier en Python
En python 2.7.2, j'ai besoin de faire une copie d'un fichier sous Linux.
newfile = "namePart1" + dictionnaire[key] + "namePart2"
os.system("cp cfn5e10_1.lp newfile")
Mais, le newfile ne peut pas être remplacé par sa chaîne correcte.
les messages dans le forum ne peut pas aider.
Toute aide est très apprécié.
- Êtes-vous sûr que vous êtes d'appel de l'os.système comme ça? Parce qu'il va copier le fichier d'origine dans un fichier nommé "newfile" (pas du tout ce qu'il dit dans la variable newfile)
- Il serait beaucoup mieux de se demander quel est le meilleur moyen pour copier ou renommer des fichiers est en Python, plutôt que de demander comment utiliser
cp
oumv
de Python.
Vous devez vous connecter pour publier un commentaire.
Utilisation
shutil.copyfile
pour copier un fichier au lieu deos.sytem
, il n'a pas besoin de créer un nouveau processus, et il va automatiquement gérer les noms de fichiers avec des caractères inhabituels dans leur, par exemple, des espaces,os.system
juste transmet la commande à la coquille, et le shell peut briser les noms de fichiers contenant des espaces, entre autres problèmes possibles.Par exemple:
copyfile
. Pour l'OP, mais cependant, il devrait faire le travail.shutil.copyfile
très probablement ne sera pas la copie d'un fichier flux de données alternatifs si, mais je ne suis pas au courant de toute utilisation des flux de données alternatifs par des fichiers Excel.shutil.copyfile
est la solution, OP devrait juste être conscient de la mise en garde qu'il ne sera pas la copie du fichier de métadonnées. Voir l'avertissement ici. "Sur les plate-formes POSIX, ce qui signifie que le propriétaire du fichier et le groupe sont perdus ainsi que de la Lca. Sur Mac OS, la fourchette de ressource et d'autres métadonnées ne sont pas utilisées. Cela signifie que les ressources seront perdues et le type de fichier et les codes de créateur ne sera pas correct. Sur Windows, les propriétaires de fichiers, Acl et les flux de données alternatifs ne sont pas copiés" - python docsCela ne remplacera pas
newfile
avec votre variable.Vous avez besoin de concaténer la variable à la fin de la chaîne comme suit:
newfile
de la chaîne divisé en plusieurs mots s'il contient des espaces, par exemple.os.system("cp " + given_dir + " " + out_dir)
Si vous voulez l'appeler
cp
de Python, utilisez lesubprocess
module:Mais il est préférable d'utiliser une fonction à partir de la
shutil
module à la place.