4 votes

Comment puis-je écrire une chaîne à un numéro de ligne spécifique ?

Je rencontre des difficultés à trouver la réponse à cela après avoir cherché pendant un certain temps. Ce que je veux faire, c'est faire une recherche de chaîne et écrire sur la ligne au-dessus ou en dessous, en fonction de ma chaîne.

Voici ce que j'ai fait jusqu'à présent:

file = open('input.txt', 'r+')  
f = enumerate(file)  
for num, line in f:    
    if 'string' in line:    
        linewrite = num - 1   
            ???????

MODIFICATION DE L'EXTENSION DE LA QUESTION INITIALE: J'ai déjà choisi la réponse qui a le mieux résolu ma question initiale. Maintenant, en utilisant la méthode d'Ashwini où j'ai réécrit le fichier, comment puis-je faire une recherche ET REMPLACER une chaîne. Pour être plus spécifique.

J'ai un fichier texte avec

SAMPLE  
AB  
CD  
..  
TYPES  
AB  
QP  
PO  
..  
RUNS  
AB  
DE  
ZY

Je veux remplacer AB par XX, UNIQUEMENT SOUS les lignes SAMPLE et RUNS J'ai déjà essayé plusieurs façons d'utiliser replace(). J'ai essayé quelque chose comme

if  'SAMPLE' in line:  
f1.write(line.replace('testsample', 'XX'))  
if 'RUNS' in line:      
f1.write(line.replace('testsample', 'XX'))  

et cela n'a pas fonctionné

4voto

Jon Clements Points 51556

Le suivant peut être utilisé comme un modèle :

import fileinput

for line in fileinput.input('somefile', inplace=True):
    if 'something' in line:
        print 'this goes before the line'
        print line,
        print 'this goes after the line'
    else:
        print line, # just print the line anyway

3voto

Ashwini Chaudhary Points 94431

Vous devrez peut-être d'abord lire toutes les lignes dans une liste, et si la condition est vérifiée, vous pouvez ensuite stocker votre chaîne à un indice particulier en utilisant list.insert

with open('input.txt', 'r+') as f:
   lines = f.readlines()
   for i, line in enumerate(lines):
       if 'string' in line:
          lines.insert(i,"somedata")  # inserts "somedata" above the current line
   f.truncate(0)         # tronque le fichier
   f.seek(0)             # déplace le pointeur au début du fichier
   f.writelines(lines)   # écrit les nouvelles données dans le fichier

ou sans stocker toutes les lignes, vous aurez besoin d'un fichier temporaire pour stocker les données, puis renommer le fichier temporaire en fichier d'origine :

import os
with open('input.txt', 'r') as f, open("new_file",'w') as f1:
   for line in f:
       if 'string' in line:
          f1.write("somedate\n")  # Déplacer f1.write(line) ci-dessus, pour écrire au dessus
       f1.write(line)
os.remove('input.txt')  # Pour Windows uniquement
os.rename("newfile", 'input.txt')  # Renommer le nouveau fichier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X