Je me demandais s'il y avait un moyen de supprimer des lignes d'un fichier contenant un ou des nombres spécifiques.

Je sais qu'il existe un moyen de supprimer les lignes contenant une chaîne spécifique, mais je souhaite supprimer les lignes contenant un nombre spécifique.

Disons que j'ai un fichier texte contenant des données telles que:

201 740 0
202 288 4
202 294 3
202 330 5
202 358 1
202 259 0

Et je souhaite supprimer les lignes contenant le numéro 0, juste 0 (et non 201, 202 ou tout autre nombre contenant 0).

Je veux que l'exemple de sortie soit:

201 740 0
202 259 0

Comment pourrais-je m'y prendre?

J'ai essayé ce qui suit:

with open('oldfile.txt') as infile, open('newfile.txt', 'w') as outfile:
    for line in infile:
        if '0':
            outfile.write(line)

Mais il écrit toujours chaque ligne, et je ne veux que les lignes qui ont le numéro 0 par elles-mêmes.

Merci d'avance!

0
andresc23 4 juin 2020 à 22:00

5 réponses

Meilleure réponse

Essaye ça:

with open('oldfile.txt') as infile, open('newfile.txt', 'w') as outfile:
    for line in infile:
        if ' 0' in line:
            outfile.write(line)

Votre expression logique essaie de voir if ' 0', qui sera évalué à vrai.

Ce que vous devez vérifier, c'est si «0» est dans la ligne, donc if ' 0' in line:

1
Rafael Barros 4 juin 2020 à 19:02
if '0': 

Sera toujours évalué comme True, car les chaînes non vides évaluent comme vrai. C'est la même chose que de faire if 'hello': ou if True:.

Ce que vous voulez faire, c'est analyser votre ligne et comparer uniquement le dernier champ

Essaye ça :

with open('oldfile.txt') as infile, open('newfile.txt', 'w') as outfile:
    for line in infile:
        fields = line.split(' ')
        if fields[-1] == '0':
            outfile.write(line)

line.split(' ') vous permet de travailler sur une liste qui ressemble à ceci:

['201', '740', '0']

À partir de là, il est facile de s'assurer que le dernier champ est '0'.

Si vous recherchez la valeur «0» dans n'importe quel champ, il est également facile de le faire:

with open('oldfile.txt') as infile, open('newfile.txt', 'w') as outfile:
    for line in infile:
        fields = line.split(' ')
        if '0' in fields:
            outfile.write(line)
0
A-y 4 juin 2020 à 19:55

La solution la plus générique que je propose utilise regex. Voici la solution.

import re

with open('oldfile.txt') as infile, open('newfile.txt', 'w') as outfile:
    pattern = re.compile('\D0\D|\D0$|^0\D')
    for line in infile:
        if not pattern.search(line):
            outfile.write(line)
0
Taha Metin Bayi 4 juin 2020 à 19:18

Voici un moyen:

with open('text1.txt','r+') as f:
    f2 = [l for l in f if '0' in l.split()]

with open('text2.txt','w') as f: 
    f.write(''.join(f2))
0
Ann Zen 4 juin 2020 à 19:10

Tu peux essayer:

if line.strip().endswith(" 0"):
    pass
else:
    outfile.write(line)

Pour sauter les lignes qui se terminent par "0" dans outfile

3
Patrick Artner 4 juin 2020 à 19:02