Comment ajouter une ligne vide après une certaine chaîne dans un fichier texte?


Temps de paixWall22

J'ai besoin de trouver un moyen d'ajouter une nouvelle ligne après une certaine chaîne dans un fichier texte.

 discount_percent :20 
 discounted :true 
 final_price :1199 
 id :893850 
 name : THELONGING  
 original_price :1499 
 discount_percent :40 
 discounted :true 
 final_price :119 
 id :1476450 
 name : CyberHentai  
 original_price :199 
 discount_percent :30 
 discounted :true 
 final_price :139 
 id :1478030 
 name : MamboWave  
 original_price :199 
 discount_percent :15 
 discounted :true 
 final_price :84 
 id :1506230 
 name : BigfootForest  
 original_price :99 
 discount_percent :40 
 discounted :true 
 final_price :59 
 id :1502600 
 name : AlienX  
 original_price :99

Ici, j'ai un fichier .txt et j'ai besoin d'un moyen d'ajouter une nouvelle ligne après toute ligne contenant 'prix_original' et le prix / les nombres après.

il y a probablement une solution facile à cela, mais je n'arrive pas à comprendre cela, et je n'ai pratiquement aucune connaissance sur la façon d'utiliser Regex

J'ai essayé ce qui suit:

def fixSpacing():
    file1 = open('data.txt', 'w')
    file2 = open('tempdata.txt', 'r+')

    for line in file2.readlines():
        if line.startswith('original_price :'):

Mais je ne pouvais pas penser à un moyen d'ajouter une nouvelle ligne après les chiffres pour le prix.

Daweo

Pour moi, cela ressemble à une tâche pour l' entrée de fichier du module intégré car il peut fonctionner en mode inplace. Prenons l'exemple suivant, que le file.txtcontenu soit:

title: 1
price: 100
desc: one
title: 2
price: 200
desc: two

puis

import fileinput
for line in fileinput.input("file.txt", inplace=True):
    end = "\n" if line.startswith("price") else ""
    print(line, end=end)

changera ledit contenu de fichier en

title: 1
price: 100

desc: one
title: 2
price: 200

desc: two

explication: en mode inplace, la sortie standard est dirigée vers le fichier d'entrée (si un fichier du même nom que le fichier de sauvegarde existe déjà, il sera remplacé silencieusement). Cela permet d'écrire un filtre qui réécrit son fichier d'entrée en place. afin que nous puissions simplement utiliser print, comme les lignes de fichiers d'entrée de les nouvelles lignes sont conservées en utilisant \ncomme print« s endse traduira par ligne vide supplémentaire et vide str en ligne inchangée garder. Gardez à l'esprit qu'après utilisation, vous n'aurez plus le fichier d'origine, seulement modifié.

Articles connexes


Ajouter du texte à un fichier après une certaine correspondance

Sung Cho Je voudrais ajouter un nouveau texte à un fichier, mais seulement après une correspondance existante. Pour ajouter un texte, je fais actuellement quelque chose comme: File.open(path/to/file, 'a') { |file| file.puts(text) } Mais cela s'ajoute toujours