2
votes

Python dépouillant les mots à des conditions spécifiques dans une liste de phrases

Mon fichier de départ était .txt, qui ressemblait à:

for s in filtered:
    f = re.search('\s')

et ainsi de suite .. si désordonné

pour le nettoyer, j'ai fait:

https://www.website.com/something1/id=39494 
https://www.website2.com/something1/id=596774

Cela m'a donné une liste de sites Web (sans espaces entre les deux) mais toujours avec des notes dans la même chaîne.

Mon objectif est le premier d'avoir une liste de sites Web "nettoyés" sans aucune note après les mots:

import re

with open('file.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

filtered = [x for x in places if x.strip()]

Pour cela j'ai pensé cibler l'espace après la fin du site et me débarrasser de tous les mots après:

https://www.website.com/something1/id=39494 notes !!!! other notes
https://www.website2.com/something1/id=596774 ... notes2 !! other notes2

Cela renvoie une erreur, mais même si cela fonctionnait, cela ne retournerait pas ce que je pensais.

La deuxième étape consiste à dépouiller le site Web de certains caractères et à le composer comme suit : https://www.website.com/embed/id=39494

mais cela viendrait plus tard.

Je me demande simplement comment puis-je réaliser la première étape et me débarrasser des notes après le site Web et avoir une liste propre.


1 commentaires

Essayez with open('file.txt', 'r') as f: for line in f: if line.strip().startswith('http'): print(line.strip().split()[0])


3 Réponses :


1
votes

Si chaque ligne est constituée d'une URL suivie d'un espace et de tout autre texte, vous pouvez simplement diviser par l'espace et prendre le premier élément de chaque ligne:

for url in urls:
  print('<iframe src="{}"></iframe>'.format(url))

EDIT: deuxième étape

urls = []
with open('file.txt') as filehandle:
  for line in filehandle:
    if not line.strip(): continue # skip empty lines
    urls.append(line.split(" ")[0])

# now the variable `urls` should contain all the URLs you are looking for


3 commentaires

Notez que j'ai passé une chaîne avec un espace dans split() mais vous pouvez également l'omettre puisque c'est de toute façon le paramètre par défaut. Je l'ai ajouté pour être plus explicite


merci, aussi pour la deuxième étape! J'ai remarqué que l'ajout de <iframe> est dans print (), aurait-il été possible de l'avoir écrit de manière stable dans une liste?


@Steven bien sûr, vous pouvez également écrire le HTML dans une liste, une longue chaîne ou un fichier. Dans tous ces cas, vous utiliseriez l'argument de print() et utiliseriez une fonction d'ajout de liste, de concaténation de chaînes ou d'écriture de fichier.



1
votes

Vous pouvez utiliser ceci:

# to read the lines
with open('file.txt', 'r') as f:
    strlist = f.readlines()
# list to store the URLs
webs = []
for x in strlist:
    webs.append(x.split(' ')[0])
print(webs)


0 commentaires

1
votes

Dans le cas où la position de l'URL n'est pas toujours au début de la ligne. Tu peux essayer

with open('file.txt') as file:
for line in file:
    m = re.match(r'https?:\/\/www\.\w+\.com\/\w+\/id=(\d+)', line)
    if m:
        print("URL=%s" % m.group(0))
        print("ID=%d" % int(m.group(1)))

alors vous pouvez utiliser la référence arrière pour obtenir l'URL et l'identifiant.

Exemple de code

https?:\/\/www\.\w+\.com\/\w+\/id=(\d+)

Démo


0 commentaires