Maison >développement back-end >Tutoriel Python >Python3. Exemple de parcours d'un dossier pour extraire des noms de fichiers spécifiques

Python3. Exemple de parcours d'un dossier pour extraire des noms de fichiers spécifiques

不言
不言original
2018-04-27 10:49:032340parcourir

Ce qui suit est un exemple de parcours d'un dossier pour extraire un nom de fichier spécifique dans Python 3. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Jetons un coup d'oeil ensemble

Lors du traitement de fichiers par lots, il est souvent nécessaire de parcourir un certain chemin pour extraire les noms de fichiers dans des conditions spécifiques. Cet article écrit une méthode de traversée violente mais très concise. C'est vraiment très concis mais très violent.

L'exemple d'objectif est : Obtenir le contenu du dossier dont le nom se termine par "_BAD" sous le dossier où les données de télédétection sont stockées. Comme il existe de nombreux niveaux sous ce fichier (année/mois/type de produit/), il existe de nombreux dossiers cibles et ils existent au dernier niveau, il est donc très ennuyeux de vérifier manuellement.

Le code est le suivant (après avoir résumé les points de connaissances) :

# -*- coding: utf-8 -*-
"""
遍历某路径下所有文件夹,获得特定文件夹下所有文件
很暴力,真的遍历了所有的文件夹
20180124
@author: 墨大宝
"""
import os
TARGETPATH = r'F:\MODIS_DATA'
records = []
for currentDir, _, includedFiles in os.walk(TARGETPATH):
 if not currentDir.endswith('_BAD'): continue
 else:
  records.append(currentDir) # 将以“_BAD”结尾的文件夹名加入records
  records.extend(includedFiles) # 将该文件夹内的文件名列表扩展到records
# 将records写入.txt
txtFile = open(os.path.join(TARGETPATH, '02_04_BAD.txt'), 'w')
txtFile.write(os.linesep.join(records))
txtFile.close()
# 将排序后的records写入.txt
with open(os.path.join(TARGETPATH, '02_04_BAD_SORTED.txt'), 'w') as txtFile:
 txtFile.write('\n'.join(sorted(records)))

os .walk() renvoie le générateur d'arborescence de répertoires. Chaque fois qu'un tuple au format (dirpath, dirnames, filenames) est généré, les éléments sont le chemin actuel, la liste des dossiers sous le chemin actuel et la liste des noms de fichiers sous le chemin actuel.

Les méthodes .append(), .extend() et .sort() de list sont modifiées sur place, mais la fonction sorted() ne l'est pas.

Lors de l'écriture d'une liste dans un fichier .txt, vous devez convertir la liste en str. Utiliser directement la fonction str() pour forcer la conversion sera moche. Utiliser des nouvelles lignes pour connecter chaque élément de la liste sera moche. avoir l'air beaucoup mieux.

os.path représente le caractère de nouvelle ligne du système, qui est "rn" sous Windows et "n" dans d'autres systèmes. Cependant, que vous utilisiez os.path ou "n" pour connecter les éléments de la liste et que vous l'ouvriez enfin avec le Bloc-notes Windows, les sauts de ligne seront toujours les mêmes. Cependant, si vous l'ouvrez avec vs code, os.path changera. une ligne de plus, ce qui donne l'impression qu'il y a une ligne entre les lignes. Quelle est la raison derrière cela ? En parlant de cela, cela peut être lié au mécanisme d'écriture de Python, donc je ne m'y plongerai pas pour le moment (en partant). un trou).

Concernant la lecture et l'écriture de fichiers, la plupart des informations recommandent le formulaire with, qui est en effet plus concis.

PS :

Je dis que os.walk() est violent car il parcourt vraiment tous les fichiers du chemin donné en fonction de l'arborescence des répertoires Dossiers et fichiers, ce sera plus lent si la taille du fichier est grande et que les noms de fichiers que vous recherchez sont peu nombreux (en fait, je ne pense pas que ce soit beaucoup plus lent si vous utilisez os.listdir() pour écrire un). fonction récursive, l'efficacité d'exécution est peut-être plus élevée, mais os.walk () La logique est simple et facile à écrire, n'hésitez pas à faire ce que vous voulez, je l'ai fait !

Recommandations associées :

instance Python de suppression de dossiers non vides

python copie les fichiers dans le répertoire spécifié

Comment Python obtient le chemin du fichier d'exécution du programme

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn