Überprüft, ob für alle Dateien im Verzeichnis Python eine bestimmte Zeichenfolge vorhanden ist, und gibt die Zielzeile aus

Überblick

[DIR_NAME] Für alle folgenden Dateien Überprüfen Sie, ob es sich um eine Textdatei mit dem in [TARGET_ENCODING_LIST] definierten Zeichencode handelt. Wenn es sich um eine Textdatei handelt, suchen Sie nach [SEARCH_WORD] und Das Ergebnis wird in den Dateinamen [OUTPUT_NAME] ausgegeben.

Umgebung

Windows8 + Python2.6-Serie

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

Ergänzung

Wie üblich ist die Ausnahmebehandlung angemessen. Es gibt aber Raum für Refactoring Ich möchte es morgen in die eigentliche Schlacht bringen, also werde ich es so veröffentlichen, wie es ist

Recommended Posts

Überprüft, ob für alle Dateien im Verzeichnis Python eine bestimmte Zeichenfolge vorhanden ist, und gibt die Zielzeile aus
Überprüfen Sie den Zeichencode für alle Dateien im Verzeichnis Python und geben Sie ihn aus
[Golang] Überprüfen Sie, ob eine bestimmte Zeichenfolge in der Zeichenfolge enthalten ist
Für Windows: Ruft eine Liste der Verzeichnisse und Dateien in einem bestimmten Verzeichnis ab.
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
[Python] Eine Funktion, die die gesamte Zeichenfolge mit einem regulären Ausdruck durchsucht und alle übereinstimmenden Zeichenfolgen abruft.
Python schlägt fehl, wenn nach dem Backslash ein Leerzeichen steht
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
Geben Sie die Zeile mit der angegebenen Zeichenfolge aus der Textdatei aus
Überprüfen Sie, ob die ausführbare Datei und ihre abhängigen Bibliotheken ein bestimmtes Symbol enthalten (vereinfachte Version).
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
Listen Sie alle Dateien im aktuellen Verzeichnis Zeile für Zeile mit vollständigem Pfad auf
Wenn verzweigen, hängt davon ab, ob die Liste ein bestimmtes Element enthält
Gibt es einen Widerspruch zwischen der Partei, die die Menschen vor NHK schützt, und der Partei, die NHK vor den Menschen schützt?
Suchen Sie im aktuellen Verzeichnis nach Dateien mit dem Zeilenvorschubcode CR + LF
Python-Skript, das alle UTF-8-Dateien unter dem Ordner mit Stückliste ohne Stückliste erstellt
Löschen Sie alle pyc-Dateien im angegebenen Verzeichnis
Entpacken Sie alle Zip-Dateien im aktuellen Verzeichnis
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
[Python] Benennen Sie alle Bilddateien in einem bestimmten Ordner nach Aufnahmedatum und -zeit um
[Ansible] Beispiel für ein Playbook, das der ersten Zeile der Datei eine Zeichenkette hinzufügt
Python> Implementierung, die 3 Dateien mit variablen Spalten synthetisiert und 3 Elemente in jeder Zeile ausgibt
[Linux] Wenn Sie aus mehreren Dateien nach einer bestimmten Zeichenfolge suchen möchten
Es gibt ein Muster, das das Programm bei Verwendung von Python-Threading nicht gestoppt hat
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.