Vérifie s'il existe une chaîne de caractères spécifique pour tous les fichiers sous le répertoire Python et renvoie la ligne cible

Aperçu

[DIR_NAME] Pour tous les fichiers ci-dessous Vérifiez s'il s'agit d'un fichier texte avec le code de caractère défini dans [TARGET_ENCODING_LIST], S'il s'agit d'un fichier texte, recherchez [SEARCH_WORD] et Le résultat est généré sous le nom de fichier [OUTPUT_NAME].

environnement

Série Windows8 + Python2.6

code

find_directory.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
# vim: fileencoding=utf-8

import os , sys , codecs

DIR_NAME = 'C:\\html\\HOGE\\'
OUTPUT_NAME = 'result_find_file_list.csv'

SEARCH_WORD = '<font'

TARGET_ENCODINGS = [
	'utf-8',
	'shift-jis',
	'euc-jp',
	'iso2022-jp'
]

FLAG_STDOUT = True
#FLAG_STDOUT = False

import os, sys

write = sys.stdout.write

def guess_charset(data):
	file = lambda d, encoding: d.decode(encoding) and encoding
	for enc in TARGET_ENCODINGS:
		try:
			file(data, enc)
			return enc
		except:
			pass
	return 'binary'

out = codecs.open(OUTPUT_NAME, 'w', 'shift-jis')
out.write('path,line_number,search,target_line\n')

for dirpath, dirs, files in os.walk(DIR_NAME):
	for fn in files:
		path = os.path.join(dirpath, fn)
		fobj = file(path, 'rU')
		data = fobj.read()
		fobj.close()
		try:
			enc = guess_charset(data)
		except:
			continue
		if enc == 'binary':
			continue
		count = 0
		try:
			for l in codecs.open(path, 'r', enc):
				count = count + 1
				if SEARCH_WORD in l:
					output = ''
					try:
						output = '"' + path + '","' + str(count) + '","' + SEARCH_WORD + '","' + l.replace('"',"'").replace('\r','').replace('\n','') + '"\r\n'
					except:
						continue
					if FLAG_STDOUT == True:
						write(output)
					out.write(output)
		except:
			continue

Supplément

Comme d'habitude, la gestion des exceptions est appropriée. Il y a de la place pour la refactorisation, mais Je veux le mettre dans la bataille réelle de demain, donc je le posterai tel quel

Recommended Posts

Vérifie s'il existe une chaîne de caractères spécifique pour tous les fichiers sous le répertoire Python et renvoie la ligne cible
Vérifiez quel est le code de caractère pour tous les fichiers sous le répertoire Python et sortie
[Golang] Vérifiez si une chaîne de caractères spécifique est incluse dans la chaîne de caractères
Pour Windows: obtenez une liste de répertoires et de fichiers dans un répertoire spécifique.
Vérifiez si la chaîne est un nombre en python
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
[Python] Une fonction qui recherche la chaîne de caractères entière avec une expression régulière et obtient toutes les chaînes de caractères correspondantes.
Python échouera s'il y a un espace après la barre oblique inverse
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Sortie de la ligne contenant la chaîne de caractères spécifiée à partir du fichier texte
Vérifier s'il y a un symbole spécifique dans le fichier exécutable et ses bibliothèques dépendantes (version simplifiée)
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Liste tous les fichiers sous le répertoire courant ligne par ligne avec chemin complet
Si branche en fonction de l'existence ou non d'un élément spécifique dans la liste
Y a-t-il une contradiction entre le parti qui protège le peuple de la NHK et le parti qui protège la NHK du peuple?
Rechercher des fichiers avec le code de saut de ligne CR + LF dans le répertoire courant
Script Python qui crée tous les fichiers UTF-8 sous le dossier avec BOM sans BOM
Supprimer tous les fichiers pyc dans le répertoire spécifié
Décompressez tous les fichiers zip dans le répertoire actuel
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
[Python] Renommez tous les fichiers image dans un dossier spécifique par date et heure de prise de vue
[Ansible] Exemple de playbook qui ajoute une chaîne de caractères à la première ligne du fichier
Python> Implémentation qui synthétise 3 fichiers avec des colonnes variables et génère 3 éléments sur chaque ligne
[Linux] Lorsque vous souhaitez rechercher une chaîne de caractères spécifique dans plusieurs fichiers
Il y a un modèle que le programme ne s'est pas arrêté lors de l'utilisation du thread Python
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.