80 lignes de code pour écrire un widget de séparation et de fusion de table en python

Appelez - moi frère. 2022-01-15 03:55:16 阅读数:316

lignes code pour crire widget

Bonjour tout le monde,C'est moi..

Peut - être qu'il y a eu trop d'heures sup,Je ne me sens pas bien ce week - end,Maux de tête、Sueur froide ou autre.Enfin en train de dormir2Jour après jour,Maintenant, ça se rétablit lentement.

Avant d'avoir de nouveaux amis récemment《》,Je me demandais s'il y avait des gadgets gratuits,C'est possible.Fractionnement et fusion des tableaux.En fait...wpsIl y a ces deux fonctions,Et ça marche très bien.Mais,Vu que tout le monde n'est pas forcément habituéwps,Ici, nous écrivons simplement un petit outil pour satisfaire tout le monde.

Outils et téléchargement de code source à la fin du document

Regardons d'abord le processus de fonctionnement des gadgets!

Occupation vidéo

Les effets de fusion et de scission sont les suivants:

Fusionner——Split

Et puis...,Essayons d'écrire cet outil nous - mêmes!

1. Préparation préliminaire

Parce que nous avons adoptépythonPour écrire des outils,Et finalement il faut l'emballer dans unexeLes documents sont à notre disposition.Pour réduire la taille de l'inclusion,Nous devons d'abord créer unEnvironnement virtuelEn attente.

En plus,Les bibliothèques tierces sont utilisées pour les opérations de fractionnement et de fusion de tableauxpandas,En même tempsguiNous utilisonspysimplegui,EmballéexeCe qui est adopté estpyinstaller.Après la création de l'environnement virtuel,Installons toutes ces bibliothèques tierces dont nous avons besoin.

# Créer un environnement virtuel
conda create -n env_1 python=3.8.8
# Activer l'environnement virtuel
conda activate env_1
# Installer trois bibliothèques (pandas Certaines opérations nécessitent une dépendance openpyxlEtxlrd,Recommandation plus)
pip install pandas
pip install openpyxl
pip install xlrd
pip install pysimplegui
pip install pyinstaller

À propos de ces trois bibliothèques , Vous pouvez consulter les documents officiels pour en savoir plus :

pandas : https://pandas.pydata.org/

pysimplegui:https://pysimplegui.readthedocs.io/en/latest/

pyinstaller:http://www.pyinstaller.org/

Outils de préparation préalable prêts , Nous entrons dans la phase de création d'outils .

2. Fractionnement des tableaux

Python La logique de mise en œuvre de la séparation des tableaux est simple ,Est d'utiliserpandas Grouper et exporter les données de chaque groupe séparément

La longueur des données du tableau original est la suivante :

Tableau récapitulatif

# Diviser le tableau
def splitTable(df,_key):
print('---------- Séparation des tableaux en cours ----------')
df = df.astype('str')
# Par champ_keyGroupe
grouped = df.groupby(by = _key)
# Exporter les données du Groupe dans un seul tableau 
for num , (i, data) in enumerate(grouped):
data.to_excel(f'.\\{
i}.xlsx',index = False,sheet_name = i)
print(f' A été démantelé {
num+1}Tableau...')

Les résultats de l'exportation sont les suivants::

Split

3. Fusion de tableaux

Python L'essence de la fusion des tableaux est Traverser toutes les données du tableau ,Puis il a adoptéconcat Méthode de fusion des données PandasNotes d'étude02-Fusion des données.

Donc,, Ici, nous utilisons principalement deux bibliothèques :osEtpandas,Parmi euxos Utilisé pour obtenir toutes les informations de fichier requises sous le dossier ,pandas Pour lire les données du tableau et effectuer concat.

# Fusionner les tableaux
def concatTable(folder):
print('---------- Fusion de tableaux en cours ----------')
# Créer une nouvelle liste vide, Pour stocker des données tabulaires 
fileList = []
# Placer les données du tableau sous le dossier dans une liste 
for fileName in os.walk(folder):
for table in fileName[2]:
path = fileName[0] + '\\' + table
if os.path.splitext(path)[1] in ('.xlsx','.xls'):
li = pd.read_excel(path)
fileList.append(li)
print(f'Lire{
len(fileList)}Tableaux...')
else:
continue
# Avecconcat Méthode fusionner les données du formulaire 
result = pd.concat(fileList)
# Exporter des données
result.to_excel(r'.\Fichiers fusionnés.xlsx',index=False,sheet_name='Résumé')

4. GUIConception

Parce que le fractionnement et la fusion des tables sont pris en charge ,Nous sommes déjà2Et3 Les deux fonctions sont partiellement encapsulées en fonction .

À propos deGUI La partie fonctionnelle de , Les fonctions suivantes doivent être prises en charge .

Pour la partie fractionnée du tableau ,Point de fonction:

  • Sélectionner un fichier:TextInputTextFileBrowse
  • Sélection des champs fractionnés après lecture du fichier :TextCombo
  • Split:Button

Pour la section fusion de tableaux ,Point de fonction:

  • Sélectionner un dossier:TextInputTextFolderBrowse
  • Fusionner:Button

En outre, Nous avons aussi besoin d'avoir une vitrine pour Boîte de sortie pour l'enregistrement des opérations du programme 、 Texte des instructions de fonctionnement de l'outil et bouton Fermer le programme .

Sur la base des exigences ci - dessus,Nous pouvons construireGUILa disposition est la suivante:

# Mise en page
layout = [[sg.Text(' Sélectionner les fichiers à diviser :',font=("Microsoft Yahoo", 12)),sg.InputText(key='file',size=(60,1),font=("Microsoft Yahoo", 10),enable_events=True) ,sg.FileBrowse('Ouvre.',file_types=(("Text Files", "*.xls*"),),font=("Microsoft Yahoo", 12))],
[sg.Text(' Sélectionnez les champs à diviser :',font=("Microsoft Yahoo", 12)),sg.Combo('',tooltip=' Sélectionnez le champ à utiliser pour le fractionnement ',font=("Microsoft Yahoo", 10), default_value='',auto_size_text=True,size=(15, 5),key='-keys-'),sg.Button(' Début de la Division ',font=("Microsoft Yahoo", 12))],
[sg.Text(' Sélectionnez le dossier à fusionner :',font=("Microsoft Yahoo", 12)),sg.InputText(key='Folder',size=(60,1),font=("Microsoft Yahoo", 10),enable_events=True) ,sg.FolderBrowse('Ouvrir le dossier',font=("Microsoft Yahoo", 12)),sg.Button('Commencer à fusionner',font=("Microsoft Yahoo", 12))],
[sg.Text(' Dossier de fonctionnement du programme :',justification='center')],
[sg.Output(size=(100, 10),font=("Microsoft Yahoo", 10))],
[sg.Text('Instructions de fonctionnement:',font=("Microsoft Yahoo", 12))],
[sg.Text(' Lignes directrices sur le fractionnement des formulaires :Sélectionner un fichier—> Sélectionnez le champ à utiliser pour le fractionnement —> Début de la Division \n Lignes directrices sur la fusion des formulaires : Sélectionnez le dossier dans lequel vous souhaitez fusionner les tables —>Commencer à fusionner',font=("Microsoft Yahoo", 10)),sg.Text('',font=("Microsoft Yahoo", 12),size=(35, 1)),sg.Button('Fermer le programme',font=("Microsoft Yahoo", 12),button_color ='red')]
]

Parce que nous devons d'abord sélectionner le fichier et diviser les champs lors du fractionnement de la table , Le champ Split est l'en - tête des données du fichier lues après la sélection du fichier ,Il faut doncsg.InputText() Paramètres généraux enable_eventsSet toTrue, L'opération de fichier sélectionnée est un événement , Certaines opérations peuvent être déclenchées .

Et puis..., Nous écrivons la fonction d'événement de boucle suivante :

# Cycle des événements
while True:
event, values = window.read()
if event in (None, 'Fermer le programme'):
break
if event == 'file':
fileName = values['file']
if os.path.exists(fileName):
df = pd.read_excel(fileName)
keys = df.columns.to_list()
window["-keys-"].Update(values = keys,font=("Microsoft Yahoo", 10),size=(15, 8))
else:
print('Le fichier n'existe pas\n Veuillez d'abord sélectionner le bon fichier ')
if event == ' Début de la Division ':
if values['-keys-']:
_key = values['-keys-']
splitTable(df,_key)
print('---------- Les travaux de fractionnement sont terminés ----------\n')
else:
print(' Champ non sélectionné - Veuillez d'abord sélectionner le champ \n Ou le fichier n'est pas sélectionné -Veuillez d'abord sélectionner le fichier')
if event == 'Commencer à fusionner':
if values['Folder']:
folder = values['Folder']
concatTable(folder)
print('---------- La fusion est terminée ----------\n')
else:
print(' Le dossier du fichier à fusionner n'est pas sélectionné ')
window.close()

Sur demande, Nous avons divisé les types d'événements en trois catégories :

  • Quand nous Sélectionner les fichiers à diviser Après,Lire d'abord le contenu du fichier, Puis obtenir l'en - tête des données du fichier ,Pour rafraîchir( window["-keys-"].Update) La boîte déroulante du champ Split est le contenu de l'en - tête ;
  • Quand nous cliquons Début de la Division Quand le bouton, Vous devez déterminer si le champ Split est sélectionné (La valeur par défaut est vide), Diviser si un champ est sélectionné , Sinon, un message d'erreur sera envoyé ;
  • Quand nous cliquonsCommencer à fusionnerQuand le bouton, Vous devez déterminer si le dossier est sélectionné , Dans l'affirmative, la fonction de données de fusion est appelée pour l'opération de fusion. , Sinon, un message d'erreur sera envoyé .

5. Code d'emballage

Ce qui est utilisé ici estpyinstaller Faire l'emballage du Code du programme ,Les instructions de fonctionnement sont les suivantes:

pyinstaller -F -w Outil de fusion de tableaux fractionnés .py

Signification des paramètres partiels :

-F Représente la génération d'un seul exécutable

-w Pour supprimer la fenêtre de la console,Voilà.GUITrès utile pour les interfaces

-p Représente votre propre chemin de classe personnalisé à charger,En général, il n'est pas utilisé

-i Icône représentant l'exécutable

Cliquez surJe regardeAtteindre10- Oui., Nous avons des outils ouverts et des téléchargements de code source dans la zone de commentaires , Merci pour votre soutien

版权声明:本文为[Appelez - moi frère.]所创,转载请带上原文链接,感谢。 https://pythonmana.com/2022/01/202201080611485185.html