Et merci d'avoir lu. Je suis actuellement aux prises avec un problème apparemment simple dans Python 3.7 qui me rend fou. Des sujets similaires dans ce forum n'ont donné aucune solution de travail pour moi.

J'ai un document avec la structure suivante:

line1

line2 

line3

Que je dois analyser dans un format comme:

"line1\n"

"line2\n"

Etc.

Malheureusement, même si je peux afficher correctement les lignes modifiées sur le terminal en utilisant repr ('\ n "') ou ('// n'"), chaque fois que j'essaye d'écrire la sortie dans un fichier en utilisant .write () ou rediriger avec >>, il y a une nouvelle ligne supplémentaire ajoutée à la position du \ n, malgré repr, // ou r, donc la sortie qui se termine dans le fichier ressemble à:

"ligne \ n"

La ligne de code en question serait: '' ' '"' + str (ligne) + '// n"' #ou + repr ('/ n "') '' ' J'ai aussi essayé: '' ' '"' + str(line) + '//n'.replace('//n', '/n') '' ' sur suggestion d'un autre utilisateur.

R "/ n" semble ne rien faire du tout. Toute suggestion serait la bienvenue, ainsi que des suggestions sur la façon de résoudre ce problème en shell. Merci pour votre temps.

0
liam_ 16 avril 2020 à 13:10

2 réponses

Meilleure réponse

D'après ce que j'ai compris, vous voulez conserver de nouvelles lignes dans le fichier de sortie + avoir \ n ajouté à la fin de chaque ligne. Voyez si ci-dessous fonctionne pour vous.

with open('source.txt') as f:
    list_ = [(line.strip() + r'\n') for line in f if line != '\n']

print(list_)

with open('output.txt', 'w') as wb_file:
    wb_file.write('\n\n'.join(list_))

List_ est constitué en utilisant la compréhension de liste. ajouter un faux '\ n' à la fin de chaque ligne de lecture.

Lors de l'écriture dans le fichier, j'ai utilisé la jointure avec 2 \ n supplémentaires car votre sortie était avec les nouvelles lignes conservées. vous pouvez supprimer et en laisser un \ n si vous ne voulez pas de nouvelles lignes dans la sortie.

0
Nijat Aliyev 16 avril 2020 à 11:22

Peut-être que si vous essayez avec readlines:

#write into the file !
file = open("yourpath", "w")   #w is for write
mylistofstrings = ["line1", "\nline2", "\nline3"]
file.writelines(mylistofstrings)
file.close()
#read the output to check :
file = open("yourpath", "r")   #r is for read
print(file.read())
file.close()

Production :

line1
line2
line3

Attention: si vous utilisez "w" pour écrire comme ici, cela effacera tout le fichier avant d'écrire. Si vous souhaitez ajouter, utilisez simplement "a" pour ajouter. Voici toutes les manières possibles de l'ouvrir: "r" Ouvrez le fichier texte pour la lecture. Le flux est positionné au début du fichier.

"r +" Ouvert pour la lecture et l'écriture. Le flux est positionné au début du fichier.

"w" Tronque le fichier à une longueur nulle ou crée un fichier texte à écrire. Le flux est positionné au début du fichier.

"w +" Ouvert pour la lecture et l'écriture. Le fichier est créé s'il n'existe pas, sinon il est tronqué. Le flux est positionné au début du fichier.

"a" Ouvrir pour ajout (écriture à la fin du fichier). Le fichier est créé s'il n'existe pas. Le flux est positionné à la fin du fichier.

"a +" Ouvert pour lecture et ajout (écriture à la fin du fichier). Le fichier est créé s'il n'existe pas. La position initiale du fichier pour la lecture est au début du fichier, mais la sortie est toujours ajoutée à la fin du fichier.

Dites-moi si cela a fonctionné et si cela a été utile!

EDIT: après avoir vu un commentaire, je viens de me rendre compte: vous avez utilisé / au lieu de \, donc ça ne peut pas fonctionner ... SOYEZ SÛR D'UTILISER \ n! XD

0
The Machinist 16 avril 2020 à 10:46