[PYTHON] Formatez le journal Git et obtenez le nom du fichier validé au format csv

Objectif

Je voulais obtenir des informations de commit git au format csv Avec l'option --pretty = format de git log, je ne pouvais pas l'obtenir dans le format que je voulais, donc j'ai sorti le journal une fois, puis le formater.

environnement

OS Mac Catalina Pycharm CE python 3.7

Préparation

Obtenir le journal git

Un fichier journal est généré lorsque vous le frappez avec une console telle que GitBash.

--date-order --date=format:'%Y/%m/%d %H:%M:%S' > git.log```

##### Journal git attendu à capturer


#### **` git.log`**
```log

commit f36da445d06d2db7b4f08a508be835f5464ded
Author: nomori<[email protected]>
Date:   2020/10/10 23:50:29
    first commit.
A	.gitignore
A	perse_git_log.py

la mise en oeuvre

perse_git_log.py


import re
import csv
import os

COMMIT_ID = 'commit '
STATUS_ADD = 'A	'
STATUS_MOD = 'M	'
STATUS_DEL = 'D	'
GIT_AUTHOR = 'Author: '
GIT_DATE = 'Date:   '

path = './input/git.log'

#Lire le fichier journal git.
array_commit_info = []
with open(path) as git_log_file:
    data = git_log_file.readlines()

for item in data:
    #Supprimer le code de saut de ligne à la fin.
    item = item.replace('\n', '')

    if COMMIT_ID in item:
        #Obtenez l'ID de hachage du commit.
        commit_id = item.replace(COMMIT_ID, '')

    elif GIT_AUTHOR in item:
        #Obtenez des informations utilisateur engagées.
        author_tmp = item.replace(GIT_AUTHOR, '')
        #Supprimer la partie adresse e-mail.
        author = re.sub(' +<.*>', '', author_tmp)

    elif GIT_DATE in item:
        #Obtenir la date et l'heure de validation.
        date = item.replace(GIT_DATE, '')

    else:
        #Obtenir l'historique des modifications de fichiers.
        file_status = item[0:2]
        if file_status == STATUS_ADD or file_status == STATUS_MOD or file_status == STATUS_DEL:
            #Obtenir le nom du fichier sans le statut Git.
            file_name = item[2:]
            #Conserver les informations dans un tableau pour la sortie.
            array_commit_info.append([commit_id, author, date, file_name])

print(array_commit_info)

#Sortie au format CSV.
file_path = './output/'
if not os.path.exists(file_path):
    os.mkdir(file_path)

output_filename = file_path + 'git_output.csv'
with open(output_filename, 'w') as f:
    writer = csv.writer(f)

    #Informations d'en-tête de sortie.
    writer.writerow(['COMMIT_ID', 'AUTHOR', 'DATE', 'COMMIT_FILE_NAME'])
    for line_data in array_commit_info:
        #Sortie des informations de validation.
        writer.writerow(line_data)

Exemple de sortie

git_output.csv


f36da445d06d2db7b4f08a508be835f5464ded,nomori,2020/10/10 23:50:29,.gitignore
f36da445d06d2db7b4f08a508be835f5464ded,nomori,2020/10/10 23:50:29,perse_git_log.py

référence

--Lecture et écriture (création / ajout) de fichiers avec Python https://note.nkmk.me/python-file-io-open-with/ --Maître de manipulation de chaînes en python https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887 --Supprimer une partie de la chaîne en Python (bande, etc.) https://note.nkmk.me/python-str-remove-strip/

Recommended Posts

Formatez le journal Git et obtenez le nom du fichier validé au format csv
Obtenir le nom de fichier dans un dossier à l'aide de glob
Lisez le fichier csv et affichez-le dans le navigateur
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Obtenez le nom de fichier enregistré dans AWS S3 (1000 ou plus)
Obtenez le nom d'hôte en Python
Recherchez le nom du fichier, y compris le mot et l'extension spécifiés dans le répertoire
Obtenir la date et l'heure au format spécifié
Remplacez le nom du répertoire et le nom du fichier dans le répertoire par une commande Linux.
Celui qui divise le fichier csv, le lit et le traite en parallèle
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Extraire uniquement le nom du fichier à l'exclusion du répertoire dans le répertoire
Analysons le journal de validation git en Python!
Obtenez le nom de la branche git et le nom de la balise avec python
Connectez-vous avec json en utilisant pygogo.
Erreur d'importation: impossible d'importer le nom 'Flask' lorsque le nom de fichier est flask.py dans Flask
Gérez CSV avec l'élément que vous souhaitez analyser dans le nom du fichier
La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
Comment obtenir le nom de la variable lui-même en python
Spécifiez le nom du fichier lors de l'envoi de courriers électroniques en pièce jointe csv
Décrivez la destination ssh en plusieurs étapes dans la configuration, connectez-vous facilement et copiez le fichier avec scp
Obtenez des résultats au format dict avec Python psycopg2
Lire la liste de liens au format csv avec l'outil graphique
Obtenez l'ID utilisateur et le nom d'écran du participant dans Slack
Une ligne pour obtenir le nième hachage de commit dans Git
Enregistrez le modèle pystan et les résultats dans un fichier pickle
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
Obtenez et créez des nœuds ajoutés et mis à jour dans la nouvelle version
[Python] Lisez le fichier csv et affichez la figure avec matplotlib
Recherchez le pandas.DataFrame avec une variable et obtenez la ligne correspondante.
Comment obtenir toutes les clés et valeurs du dictionnaire
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
[Shell] Comment obtenir la branche distante par défaut avec Git
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
À propos de la nécessité d'une première barre oblique dans le nom de l'abonné et le nom de l'éditeur
Comment obtenir et définir le nom du serveur NTP par DHCP
python> Afficher 3 fractions au format ".3f, .3f, .3f" / Obtenir 3 valeurs de coordonnées dans la plage [-1: 1]
[Django] Importer et exporter des tables DB au format Excel ou CSV
Quoi qu'il en soit, le journal de communication série le plus rapide est laissé dans le fichier
Mettre en forme le fichier CSV de "Fête nationale" du Cabinet Office avec des pandas
Obtenez la formule dans le fichier Excel sous forme de chaîne en Python
Obtenez le titre et la date de livraison de Yahoo! News en Python
À partir de la page du produit AWS cloud, placez le nom du service AWS sur csv
Comment obtenir toutes les clés et valeurs du dictionnaire
Enregistrez le fichier binaire en Python
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Lecture et écriture de fichiers CSV Python
L'histoire du "trou" dans le fichier
Obtenez le chemin du bureau en Python
Obtenez le chemin du fichier à l'aide de Pathlib
Récupérer la chaîne de requête (chaîne de requête) avec Django
[Python Kivy] Comment obtenir le chemin du fichier par glisser-déposer
Lire et formater des fichiers csv mélangés avec des tabulations de virgule avec des pandas Python
Prédisez la quantité d'énergie utilisée en 2 jours et publiez-la au format CSV
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande
Comment obtenir la différence de date et d'heure en secondes avec Python
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7