En utilisant Python, je dois écrire un script qui "nettoie" essentiellement un fichier texte de données. Jusqu'à présent, j'ai supprimé tous les caractères indésirables ou les ai remplacés par des caractères acceptables (par exemple, un tiret -
peut être remplacé par un espace). Maintenant, je suis arrivé au point où je dois séparer les mots qui sont réunis. Voici un extrait des 15 premières lignes du fichier texte
AccessibleComputing Computer accessibility
AfghanistanHistory History of Afghanistan
AfghanistanGeography Geography of Afghanistan
AfghanistanPeople Demographics of Afghanistan
AfghanistanCommunications Communications in Afghanistan
AfghanistanMilitary Afghan Armed Forces
AfghanistanTransportations Transport in Afghanistan
AfghanistanTransnationalIssues Foreign relations of Afghanistan
AssistiveTechnology Assistive technology
AmoeboidTaxa Amoeba
AsWeMayThink As We May Think
AlbaniaHistory History of Albania
AlbaniaPeople Demographics of Albania
AlbaniaEconomy Economy of Albania
AlbaniaGovernment Politics of Albania
Ce que je veux faire, c'est séparer les mots qui sont joints au point où la lettre majuscule apparaît. Par exemple, je veux que la première ligne ressemble à ceci:
Accessible Computing Computer accessibility
Le script doit prendre l'entrée du fichier et écrire le résultat dans un fichier de sortie. C'est ce que j'ai actuellement et ça ne marche pas du tout! (je ne sais pas si je suis sur la bonne voie ou pas non plus)
import re
input_file = open("C:\\Users\\Lucas\\Documents\\Python\\pagelinkSample_10K_cleaned2.txt",'r')
output_file = open("C:\\Users\\Lucas\\Documents\\Python\\pagelinkSample_10K_cleaned3.txt",'w')
for line in input_file:
if line.contains('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'):
newline = line.
output_file.write(newline)
input_file.close()
output_file.close()
3 réponses
Je suggère de diviser les mots avec l'expression régulière suivante:
import re, os
input_file = 'input.txt'
output_file = 'output.txt'
with open(input_file, 'r') as f_in:
with open(output_file, 'w') as f_out:
for line in f_in.readlines():
p = re.compile(r'[A-Z][a-z]+|\S+')
matches = re.findall(p, line)
matches = ' '.join(matches)
f_out.write(matches+ os.linesep)
En supposant que data.txt contient du texte que vous avez collé dans votre message, il imprimera:
Accessible Computing Computer accessibility
Afghanistan History History of Afghanistan
Afghanistan Geography Geography of Afghanistan
Afghanistan People Demographics of Afghanistan
Afghanistan Communications Communications in Afghanistan
Afghanistan Military Afghan Armed Forces
Afghanistan Transportations Transport in Afghanistan
Afghanistan Transnational Issues Foreign relations of Afghanistan
Assistive Technology Assistive technology
Amoeboid Taxa Amoeba
As We May Think As We May Think
Albania History History of Albania
Albania People Demographics of Albania
Albania Economy Economy of Albania
Albania Government Politics of Albania
...
Vous pourriez faire:
re.sub(r'(?P<end>[a-z])(?P<start>[A-Z])', '\g<end> \g<start>', line)
Cela insérera un espace entre les lettres majuscules minuscules côte à côte (en supposant que vous n'avez que des caractères anglais.)
Ce n'est pas la meilleure méthode, mais c'est simple.
from string import uppercase
s = 'AccessibleComputing Computer accessibility'
>>> ' '.join(''.join(' ' + c if n and c in uppercase else c
for n, c in enumerate(word))
for word in s.split())
'Accessible Computing Computer accessibility'
Et en passant, voici comment vous devez lire / écrire votre fichier:
f_in = "C:\\Users\\Lucas\\Documents\\Python\\pagelinkSample_10K_cleaned2.txt"
f_out = "C:\\Users\\Lucas\\Documents\\Python\\pagelinkSample_10K_cleaned3.txt"
def func(line):
processed_line = ... # your line processing function
return processed_line
with open(f_in, 'r') as fin:
with open(f_out, 'w') a fout:
for line in fin.readlines():
fout.write(func(line))
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.