1
votes

Trouver un modèle de chaîne dans une liste python

Je suis tout nouveau en python et je demanderais de l'aide.

J'ai un fichier texte sur lequel je dois faire un certain nettoyage, à savoir que je dois supprimer certains modèles de chaîne des lignes. Ci-dessous ce que j'ai fait jusqu'à présent:

f = open("myfile.txt", "r")

mylist = []
for i in f:
    mylist.append(i.strip().split('\t')) #removing newlines '\n'

for i in range(0, len(mylist)): # iterate the list to find the string pattern
    #if "@@" in mylist[i]: # I have tried this as well
    if mylist[i].count('@@') > 0:    
        print(mylist[i])
    else:
        print('NOT')

Ce code ne trouve pas le modèle de chaîne que je veux.


2 commentaires

Essayez for i dans f.readlines (): au lieu de for i in f


Vous n'affichez que du code qui ne fonctionne pas sans aucune explication sur ce que ce code est censé faire. À quoi ressemblerait exactement le motif? En particulier, le @@ sera-t-il toujours isolé par des espaces, ou pourrait-il faire partie d'un «mot» plus long?


4 Réponses :


0
votes

Vous pouvez essayer la fonction suivante: find () . Il renvoie la position où se trouve la sous-chaîne.

if ("@@".find(mylist[i]) != -1):
    print(mylist[i])


0 commentaires

0
votes

J'aurais fait beaucoup plus simple:

for line in f.readlines(): 
    if '@@' in line:
        print(line)
    else:
        print('NOT')


0 commentaires

0
votes

vous pouvez essayer ceci pour supprimer le motif directement. Pourquoi ajouter plus de complexité en recherchant d'abord puis en supprimant?

with open('your_file_path_here','r') as f:
    print([mystr.replace("@@",'') for mystr in f.readlines()])

Vous pouvez également le faire en une seule ligne comme suit:

mylist = []
for i in f:
    # you can use readline() function here
    mylist.append(i.strip().split('\t')) #removing newlines '\n'

my_new_list = [mystr.replace("@@",'') for mystr in mylist]


2 commentaires

le décapage pour supprimer \ n semble redondant, pourquoi ne pas utiliser readlines () ???


ma principale préoccupation était dans la fonction replace () où l'OP a besoin d'aide. Cependant, votre optimisation est beaucoup plus continentale.



0
votes
import re    
data = [line 
        for line in f.readlines() 
        if re.findall(r'@@', line)] # iterate the list to 

0 commentaires