0
votes

Comment incrémenter une variable (avec nombre) à l'intérieur du script Python?

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: xxx

essentiellement, j'ai besoin d'incrémenter uniquement le nombre Présenter dans le nom de fichier texte de destination.

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. xxx


3 commentaires

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 . 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 , par exemple. Gist.github.com/fcracker79/d971C2A903A08C80ee8148ad00f6667A


5 Réponses :


2
votes

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


0 commentaires

4
votes

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))


4 commentaires

Vous devez utiliser la formatage des chaînes au lieu de la concaténation de chaîne et Plage () peut prendre un argument Démarrer afin que vous n'ayez pas besoin du i + 1 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 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 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 . Dans tous les cas, j'ai également fourni la syntaxe alternative que vous avez suggérée également.



4
votes

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. xxx


1 commentaires

@RoadRunner Non.



1
votes

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


4 commentaires

@RoadRunner Le fait que l'OP devra transmettre la chaîne formatée vers a.cmd_run () est assez évident.


@brunodeshuilliers assez juste, j'ai enlevé mon commentaire. Je suggère simplement une raison pour laquelle cette réponse était probablement 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.



0
votes

Les autres réponses sont bonnes, mais vous pouvez également faire cela à l'ancienne façon façonnée: xxx

Vous pouvez simplement itérer sur plage (1, 11) à Obtenez les numéros 1 - 10, à l'exclusion de 11. Vous pouvez consulter plage () pour des spécificités de comportement.

additionnellement, comme indiqué dans les autres réponses, la bonne chose à propos de shuttilis.copyfile () 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.

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.


0 commentaires