J'ai essayé de chercher une solution mais rien ne me donnait tout ce dont j'avais besoin. Je ne suis pas sûr que Regex puisse faire ce dont j'ai besoin.
Je dois traiter une grande quantité de données dans lesquelles des informations de licence sont fournies. Il me suffit de saisir le nombre de licences et le nom de chaque licence, puis groupe et Tally la licence compte pour chaque entreprise. P>
Voici un exemple de données tirées: P>
L00129A578-E105C1D138 1 Centralized Recording $42.00 L00129A677-213DC6D60E 1 Centralized Recording $42.00 1005272AE2-C1D6CACEC8 5 Station $45.00 100525B658-3AC4D2C93A 5 Station $45.00
3 Réponses :
On dirait que vous essayez d'ignorer le numéro de licence et d'obtenir le compte et le nom. Donc, ce qui suit devrait vous pointer sur votre chemin pour vos données, s'il est aussi uniforme qu'il semble:
f = open('/path/to/your_data_file.txt')
for line in f.readlines():
# run regex and do stuff for each line
pass
Merci, je pense que c'est proche. Comment importer le fichier texte qui doit être recherché à l'aide de ce code?
C'est le f = ouvert ("your_data_file.txt ') code> ligne. Et f.Readlines () code> vous donnera une ligne à la fois.
Donc, j'ai le fichier Python dans le même dossier que le fichier Excel et le code sont les suivants: Import Re F = Ouvrir (SAP de base pour les accords.xlsx) pour la ligne dans F.Readlines (): # Exécutez Regex et faites des trucs pour chaque ligne r = repère (r "\ s + (\ d +) \ s + [A-ZA-Z] +") R = RECOMPILE (R "\ S + (\ D +) \ S + ([A-ZA-Z] +) ") M = R.Search (" 1 centralisé ") M.Groups () Passez lorsque j'exécute le programme, il ferme simplement instantanément et ne fait rien
La ligne m.groups () code> est de vous montrer quelle est la sortie de la recherche, quand elle réussit. C'est à vous de décider, en tant que programmeur, d'aller "Oh, alors c'est ce que je me sors. Ce sont les parties dont j'ai besoin. Je peux aller d'ici." La ligne Pass code> est juste pour que l'exemple soit compilé pour vous. C'est le commentaire "Exécuter regex et faire des trucs pour chaque ligne" destiné à vous inciter à mettre votre propre logique là-bas. Vous devrez obtenir les pièces, suivre les totaux (indice: DefaultDict (int)), etc.
En outre, je ne suis pas sûr que vous ayez dit "Excel File" dans votre poste initial. Je supposais des chaînes dans un fichier texte. C'est comme ça que j'irais, si j'étais toi. Si elle exporte en tant que fichier .csv, vous aurez des virgules là-bas et vous devrez modifier la regex. De toute façon, c'est définitivement faisable. (Jeez. Si c'est un fichier Excel, vous pouvez probablement le faire dans Excel!)
Lol je me suis approché de ce dont j'avais besoin avec juste exceller, mais ça me ralentit toujours. J'ai besoin de copier les informations de chaque client dans le Bloc-notes et d'ajouter des onglets entre chaque numéro de comptage de licence et nom de licence, puis processus dans Excel puis copiez-vous hors de l'Excel dans un document Word. Cela fonctionne, mais c'est lent. La formule que j'utilise dans Excel est = Sumif (C1: C396, "Station", B1: B396) + Sumif (C1: C396, "Station", B1: B396)
Vous devriez pouvoir exporter le fichier en tant que fichier .csv de Excel. Je crois que c'est fichier -> exporter code> ou fichier -> enregistrer sous ... code>
Merci d'avoir travaillé avec moi. Je suis toujours nouveau à Python et je suis le plus à l'aise avec Pyutogui, donc j'ai fini par utiliser uniquement Pyutogui, FuncTools et Collections pour répondre à mes besoins. Merci encore.
import re, io, pandas as pd
a = open('your_data_file.txt')
pd.read_csv(io.StringIO(re.sub(r'(?m).*\s(\d+)\s+(.*\S+)\s+$\n|.*','\\1,\\2',a)),
header=None).groupby(1).sum()[0].to_dict()
Pandas est un bon outil pour des emplois comme celui-ci. Vous pourriez avoir à jouer un peu avec cela. Vous devrez également exporter votre fichier Excel sous forme de fichier .csv. Dans l'interprète, essayez: qui vous donnera les en-têtes de colonne du fichier CSV. Si vous avez des têtes d'en-têtes et des numéros, vous pouvez alors les extraire comme une liste de tuples comme suit: p> Vous pouvez alors trier cette liste par nom: p> XXX PRE> Pandas a probablement une méthode de compression de cela facilement, mais je ne peux pas le rappeler: P> Vous pouvez maintenant écrire ceci à Un fichier texte comme suit (FStrings nécessite Python 3.6 +) P> with open("myjob.txt", "w+") as fout:
for x in done:
line = f"name: {x[0]} count: {x[1]} \n"
fout.write(line)
Hé, bienvenue dans le débordement de la pile! Qu'est-ce que tu as essayé jusque-là?
J'ai regardé dans Regex mais cela ne semble pas capable de tirer les noms de licence avec les valeurs numériques. J'utilise une formule Excel, mais c'est un travail encore fastidieux, j'espère qu'il y a un moyen facile de le faire avec Python. Je connais un peu d'autopytopie mais pas assez pour faire ce que je dois faire.
Eh bien, quelles regextes avez-vous essayé? Je ne suis pas non plus, mais quelque chose comme
[A-Z0-9] {10} - [A-Z0-9] {10} code> semble fonctionner pour les échantillons de données que vous avez fournis.Mes excuses, pourriez-vous me donner un exemple complet du code que je peux jouer avec et comprendre? Cela ne me dérange pas de déterminer et d'apprendre que le regex semble un peu difficile de sauter sans exemple pour travailler avec.
À coup sûr, vous pouvez utiliser Regex101.com pour expérimenter avec elle :)
Pouvez-vous montrer le format de sortie souhaité que vous souhaitez pour les données données?
Le format souhaité serait quelque chose comme: 60 MaxCommunicator Session 1 Maxmobile 99 SoftSwitch Station 12 SIP Session Session Licence 7 Polycom Adv Siège Lic 12 g.711 / G.723 / G.729 Chaînes VoIP 7 tiers SIP Dispositif Siège 1 SoftSwitch Combo Base
J'ai juste besoin du nombre de licences totales pour un type de licence spécifique et le nom de la licence à côté de celui-ci. Rien d'extraordinaire. Le nombre de licences sera toujours différent, mais il n'ya que 20 ou deux noms différents pour les licences.