J'ai fait un programme pour vérifier la taille d'un fichier avec Python

introduction

Je l'ai refait pour pratiquer Python.

Description du logiciel

Sort le chemin absolu et la taille d'un fichier avec une capacité supérieure à la capacité définie dans le terminal. Les options sont les suivantes

---- start: vous pouvez définir le point de départ de la recherche de fichiers ---- trier: sortie de gros fichiers ---- plus: vous pouvez définir la capacité de référence de sortie ---- grep: seuls les chemins contenant la chaîne spécifiée peuvent être affichés

environnement

Ubuntu18.04LTS Python3.6.9 vim

Code source

import argparse
import os


class Measure:
    def __init__(self, sort=None, more=None, grep=None):
        self.sort = sort

        if more is None:
            self.more = 1024 * 1024
        else:
            self.more = more

        self.grep = grep
        self.result = []

    def get_list(self):
        path_list = []
        dir_list = []
        for content in os.listdir():
            if os.path.isfile(content):
                path_list.append(content)
            elif os.path.isdir(content):
                dir_list.append(content)

        return path_list, dir_list

    def measure(self, path_list):
        for path in path_list:
            if os.path.getsize(path) > self.more:
                self.result.append(
                        (os.path.abspath(path), os.path.getsize(path))
                    )

    def get_deeper(self, dir_list):
        for dire in dir_list:
            if os.path.islink(dire):
                continue
            os.chdir(dire)
            self.main()
            os.chdir('../')

    def main(self):
        path_list, dir_list = self.get_list()
        self.measure(path_list)
        self.get_deeper(dir_list)

    def search(self, word):
        for i in self.grep:
            if word.find(i) >= 0:
                return word
            else:
                return
    
    def convert_unit(self, capacity):
        unit = {0: 'B', 1: 'KB', 2: 'MB', 3: 'GB', 4: 'TB'}
        count = 0
        while capacity // 1024:
            capacity /= 1024
            count += 1

        capacity = round(capacity)
        capacity = str(capacity) + unit[count]
        return capacity 

    def show_result(self):
        if self.sort:
            self.result = sorted(self.result, key=lambda z: z[1], reverse=True)
        for path, capacity in self.result:
            if self.grep:
                path = self.search(path)
            if path is None:
                continue
            capacity = self.convert_unit(capacity)
            print(path, capacity)


def get_parser():
    parser = argparse.ArgumentParser(description='search file\'s capacity')

    parser.add_argument('--start', help='')
    parser.add_argument('--sort', action='store_true', help='')
    parser.add_argument('--more', type=int, help='')
    parser.add_argument('--grep', nargs='*', help='')

    return parser.parse_args()


def cli():
    args = get_parser()

    if args.start:
        try:
            os.chdir(args.start)
        except FileNotFoundError:
            print(args.start , 'is not file or directory.')
            return

    m = Measure(args.sort, more=args.more, grep=args.grep)
    m.main()
    m.show_result()


if __name__ == '__main__':
    cli()

en conclusion

J'ajouterai à tout moment diverses fonctions, comme une fonction pour afficher la dernière date de modification du fichier et une fonction pour enregistrer le résultat dans un fichier CSV.

Recommended Posts

J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait un programme de gestion de la paie en Python!
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
J'ai créé un programme cryptographique César en Python.
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Je veux échantillonner au hasard un fichier avec Python
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
Différentes façons de lire la dernière ligne d'un fichier csv en Python
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Changer la destination de sortie standard en un fichier en Python
[Note] Importation de fichiers dans le répertoire parent en Python
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Vérifiez le comportement du destroyer en Python
J'ai créé un fichier de configuration avec Python
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
Comment déterminer l'existence d'un élément sélénium en Python
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai écrit le code pour écrire le code Brainf * ck en python
Lisez le fichier en Python avec un chemin relatif depuis le programme
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Un programme qui redimensionne automatiquement la taille d'image requise pour les icônes d'application iOS en Python
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai créé une application Web en Python qui convertit Markdown en HTML
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python
Comment créer un fichier JSON en Python
Copiez la liste en Python
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Je veux colorer une partie de la chaîne Excel avec Python
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Sortie sous la forme d'un tableau python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
Je veux écrire dans un fichier avec Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
Je veux afficher la progression en Python!
[Python / Jupyter] Traduisez le commentaire du programme copié dans le presse-papiers et insérez-le dans une nouvelle cellule.
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs