Je suis nouveau sur Python, alors allez-y doucement, je suis sûr que ma question a une solution très simple, qui semble m'échapper. J'essaie d'écrire une chaîne dans un fichier dans ce format:

"string1" variable "string2"

Mais il semble toujours écrire la variable "string2" "string1"

Voici mon code:

inF = open("f:\test\Users.txt", 'r')
outF = open("f:\test\commands.txt", 'w')

for line in iter(inF):
    s = "{0} {1} {2}" .format("adduser ",line," password")
    outF.write(s)
inF.close()
outF.close()

J'ai aussi essayé:

for line in iter(inF):
    outF.write("adduser " + lines + " password")

La sortie est toujours:

passwordadduser user.name
1
panzza0031 15 juil. 2015 à 11:25

3 réponses

Meilleure réponse

Lorsque vous lisez une ligne d'un fichier, elle inclura toujours le caractère de nouvelle ligne. Vous concaténez ensuite cela directement. Donc, en fait, ce que vous voyez est le suivant:

adduser line1\n
passwordadduser line2\n
passwordadduser line3\n

Etc.

Pour résoudre ce problème, supprimez la ligne lorsque vous la lisez:

for line in iter(inF):
    line = line.strip('\n')
    s = "{0} {1} {2}\n" .format("adduser ",line," password")
3
Daniel Roseman 15 juil. 2015 à 08:46

Veuillez utiliser des gestionnaires de contexte pour travailler avec des fichiers. Vous devez également gérer les nouveaux symboles de ligne \n lors de la lecture et de l'écriture:

in_filename = "f:\\test\\Users.txt"
out_filename = "f:\\test\\commands.txt"

with open(in_filename, 'r') as in_fh, open(out_filename, 'w') as out_fh:
    for in_line in in_fh:
        out_line = "{} {} {}\n" .format("adduser", in_line.strip('\n'), "password")
        out_fh.write(out_line)

Users.txt:

us1
us2
us3

Commands.txt:

adduser us1 password
adduser us2 password
adduser us3 password
1
Mikhail Gerasimov 15 juil. 2015 à 08:41

Si vous cochez, vous verrez que les deux premières lignes sont comme ceci:

adduser user1
 passwordadduser user2

Vous lisez le fichier ligne par ligne: line contiendra un "\ n" de fin, donc lorsque vous l'écrivez, il passe à une nouvelle ligne, et vous ne terminez pas ce que vous écrivez avec une nouvelle ligne, vous obtenez donc passwordadduser. Quelque chose comme:

outF.write("{0} {1} {2}\n" .format("adduser ",line.strip()," password"))

Devrait résoudre votre problème.

1
garph0 15 juil. 2015 à 08:34