Utilisation du script Python ci-dessous, j'essaie de copier un fichier texte et d'essayer de créer 10 copies du même fichier, comme indiqué ci-dessous: essentiellement, j'ai besoin d'incrémenter uniquement le nombre Présenter dans le nom de fichier texte de destination. P> J'ai essayé d'utiliser "pour boucle" avec la commande de plage. Mais je ne sais pas comment incrémenter un numéro dans une commande CP. P>
5 Réponses :
Depuis le A.CMD_RUN CODE> L'argument de commande contient une chaîne, vous pouvez simplement modifier cette chaîne dans une boucle tandis que la boucle. i = 1
while i < 11:
string = 'cp /sh/ec_rawlog/Logs_new_1.txt /sh/logs/logs%s.txt' % i
a = RunCmd()
a.cmd_run(string)
i += 1
Il devrait être aussi simple que
import shutil
for i in range(1,11):
shutil.copyfile('/path/to/source/file','/destination/path/logs{}.txt'.format(i))
Vous devez utiliser la formatage des chaînes au lieu de la concaténation de chaîne et Plage () code> peut prendre un argument code> Démarrer code> afin que vous n'ayez pas besoin du i + 1 code> du tout.
@brunodesthuilliers à ce moment-là, il est à peu près plus sur les regards que toute autre chose que oui, c'est une syntaxe alternative. (Sauf si vous vraiment i> avez besoin de vous soucier de la performance, bien sûr)
Ce n'est pas "à peu près des regards que toute autre" mais sur l'écriture de code idiomatique lisible. La réadiblité est très appréciée par les programmeurs Python.
La différence de lisibilité entre ces deux exemples particuliers est basée sur l'opinion. Quelqu'un pourrait voir le 10 code> comme indiquant clairement qu'il y a exactement 10 itérations. D'autres pourraient préférer l'autre syntaxe. De plus, dans cette situation, comme il n'y a pas de nombreuses variables différentes à concaténité, vous pouvez faire une affaire pour la concaténation ou en utilisant le format code>. Dans tous les cas, j'ai également fourni la syntaxe alternative que vous avez suggérée également.
the Shutil Module offre un certain nombre de Opérations de niveau sur les fichiers et les collections de fichiers. En particulier, des fonctions sont fournies à la section Copie et retrait du fichier de support. P>
xxx pré> blockQuote>
@RoadRunner Non.
Vous devez utiliser Formatage de chaîne
cp /sh/ec_rawlog/Logs_new_1.txt /sh/logs/logs1.txt cp /sh/ec_rawlog/Logs_new_2.txt /sh/logs/logs2.txt cp /sh/ec_rawlog/Logs_new_3.txt /sh/logs/logs3.txt cp /sh/ec_rawlog/Logs_new_4.txt /sh/logs/logs4.txt cp /sh/ec_rawlog/Logs_new_5.txt /sh/logs/logs5.txt cp /sh/ec_rawlog/Logs_new_6.txt /sh/logs/logs6.txt cp /sh/ec_rawlog/Logs_new_7.txt /sh/logs/logs7.txt cp /sh/ec_rawlog/Logs_new_8.txt /sh/logs/logs8.txt cp /sh/ec_rawlog/Logs_new_9.txt /sh/logs/logs9.txt cp /sh/ec_rawlog/Logs_new_10.txt /sh/logs/logs10.txt
@RoadRunner Le fait que l'OP devra transmettre la chaîne formatée vers a.cmd_run () code> est assez évident.
@brunodeshuilliers assez juste, j'ai enlevé mon commentaire. Je suggère simplement une raison pour laquelle cette réponse était probablement i> la bownvote.
@RoadRunner assez juste aussi ;-)
En outre, la question OP est effectivement comment incrémenter le nombre dans la chaîne. La plupart des autres réponses sont plus concentrées sur la manière de copier le fichier.
Les autres réponses sont bonnes, mais vous pouvez également faire cela à l'ancienne façon façonnée: Vous pouvez simplement itérer sur additionnellement, comme indiqué dans les autres réponses, la bonne chose à propos de ayant dit cela, le code source est toujours ouvert des fichiers sous la hotte afin que je suppose que c'est quelque chose à considérer. p> p> plage (1, 11) code> à Obtenez les numéros 1 - 10, à l'exclusion de 11. Vous pouvez consulter plage () code> pour des spécificités de comportement. p> shuttilis.copyfile () code> est qu'il évite la nécessité d'ouvrir des fichiers, comme indiqué ci-dessus, et vous pouvez copier le contenu directement sans problème. P>
On dirait une manière compliquée de faire quelque chose de simple. Pourquoi créez-vous une classe pour faire cela? Jetez un coup d'œil au module
shuttil code>. Aussi, apprenez les bases des opérations de cordes Python.Il y a plusieurs façons de réaliser cela. Vous pouvez avoir une boucle pour la plage (10) qui exécutez la même commande CMD et mettez à jour le nom du fichier cible en concaténate le numéro de la chaîne. '/ sh / journaux / journaux' + num + '.txt'
D'accord, et si vous voulez vraiment cela, au moins associer la commande dans le constructeur
runcmd code>, par exemple. Gist.github.com/fcracker79/d971C2A903A08C80ee8148ad00f6667A