web-dev-qa-db-fra.com

Comment ajouter de nouvelles données sur une nouvelle ligne

Mon code ressemble à ceci:

def storescores():

   hs = open("hst.txt","a")
   hs.write(name)
   hs.close() 

donc si je le lance et entre "Ryan", puis le lance à nouveau et entre "Bob", le fichier hst.txt ressemble à

RyanBob 

au lieu de

Ryan
Bob

Comment puis-je réparer ça?

52
RyanH2796

Si vous voulez une nouvelle ligne, vous devez en écrire une explicitement. La manière habituelle est comme ça:

hs.write(name + "\n")

Ceci utilise un échappement de barre oblique inversée, \n, que Python convertit en un caractère de nouvelle ligne dans les littéraux de chaîne. Il concatène simplement votre chaîne, name, et ce caractère de nouvelle ligne dans une chaîne plus grande, qui est écrite dans le fichier.

Il est également possible d'utiliser un littéral de chaîne multiligne à la place, qui ressemble à ceci:

"""
"""

Vous pouvez également utiliser le formatage de chaîne au lieu de la concaténation:

hs.write("{}\n".format(name))

Tout cela est expliqué dans le chapitre Entrée et Sortie du tutoriel.

61
abarnert

Toutes les réponses semblent bien fonctionner. Si vous avez besoin de faire cela plusieurs fois, sachez que l'écriture

hs.write(name + "\n")

construit une nouvelle chaîne en mémoire et l'ajoute au fichier.

Plus efficace serait

hs.write(name)
hs.write("\n")

qui ne crée pas une nouvelle chaîne, ajoute juste au fichier.

14
serv-inc

Dans Python> = 3.6, vous pouvez utiliser la nouvelle fonctionnalité chaîne littérale :

with open('hst.txt', 'a') as fd:
    fd.write(f'\n{name}')

Veuillez noter que l'utilisation de ' with statment ' fermera automatiquement le fichier quand le fd sera hors de portée

6
Vlad Bezden

J'ai eu le même problème. Et j'ai pu le résoudre en utilisant un formateur.

file_name = "abc.txt"
new_string = "I am a new string."
opened_file = open(file_name, 'a')
opened_file.write("%r\n" %new_string)
opened_file.close()

J'espère que ça aide.

5
S3445

Il y a aussi un fait que vous devez prendre en compte. Vous devez d’abord vérifier si votre fichier est vide avant d’y ajouter quoi que ce soit. Parce que si votre fichier est vide, je ne pense pas que vous souhaitiez ajouter une nouvelle ligne vierge au début du fichier. Ce code

  1. vérifie d'abord si le fichier est vide
  2. Si le fichier est vide, il ajoutera simplement votre texte d'entrée au fichier, sinon il ajoutera une nouvelle ligne, puis votre texte sera ajouté au fichier. Vous devriez utiliser try catch pour os.path.getsize() pour intercepter toute exception.

Code:

import os

def storescores():
hs = open("hst.txt","a")
if(os.path.getsize("hst.txt") > 0):
   hs.write("\n"+name)
else:
   hs.write(name)

hs.close()
4
ρss

La solution n'est pas d'ajouter une nouvelle ligne après avoir écrit votre chaîne. Cela peut résoudre un problème différent. Ce que vous demandez, c'est comment ajouter une nouvelle ligne avant vous commencez à ajouter votre chaîne. Si vous souhaitez ajouter une nouvelle ligne, mais uniquement s'il n'en existe pas déjà, vous devez d'abord le savoir en lisant le fichier.

Par exemple,

with open('hst.txt') as fobj:
    text = fobj.read()

name = 'Bob'

with open('hst.txt', 'a') as fobj:
    if not text.endswith('\n'):
        fobj.write('\n')
    fobj.write(name)

Vous voudrez peut-être ajouter la nouvelle ligne après le nom, ou non, mais dans tous les cas, ce n'est pas la réponse à votre question.

4
Wyrmwood

Je suppose que tout ce que vous voulez, c'est une simple concaténation de chaînes:

def storescores():

   hs = open("hst.txt","a")
   hs.write(name + " ")
   hs.close() 

Sinon, remplacez le "" par "\ n" pour une nouvelle ligne.

2
Daniel Casserly
import subprocess
subprocess.check_output('echo "' + YOURTEXT + '" >> hello.txt',Shell=True)
0
markroxor