Über Ihre Frage: Sie können ein Wörterbuch mit der Zählung jeder Zeichenfolge zu halten und das zurückgeben. Aber wenn Sie Ihre derzeitige Struktur beibehalten, wird es nicht nett sein, den Überblick zu behalten.
Welche führt zu meinen Vorschlägen:
- Sie sind ohne ersichtlichen Grund die gesamte Datei im Speicher zu halten, können Sie durch sie gehen Zeile für Zeile und überprüfen Sie die Strings in der aktuellen Zeile.
- Sie lesen die gleichen Dateien auch mehrmals, während Sie sie nur einmal lesen und überprüfen können, ob die Zeichenfolgen vorhanden sind.
- Sie überprüfen die Erweiterung der Datei, die wie ein Job für
glob
klingt.
- Sie können eine
defaultdict
verwenden, so dass Sie nicht darauf achten müssen, ob die Zählung anfänglich 0
war oder nicht.
Modified Code:
from collections import defaultdict
import glob
SMILIES = [':)', ':P', '=]']
def count_in_files(string_list):
results = defaultdict(int)
for file_name in glob.iglob('*.txt'):
print(file_name)
with open(file_name) as input_file:
for line in input_file:
for s in string_list:
if s in line:
results[s] += 1
return results
print(count_in_files(SMILIES))
- schließlich mit diesem Ansatz, wenn Sie Python verwenden> = 3.5, können Sie den
glob
Aufruf for file_name in glob.iglob('**/*.txt', recursive=True)
ändern, so wird es rekursiv, falls die Suche du brauchst es.
Dies druckt etwas wie: "Schleife verschiedene Smileys"
defaultdict(<class 'int'>, {':P': 2, ':)': 1, '=]': 1})
Was Sie bedeuten kann Du willst Smileys wie ': D',';) ',':) 'usw. zählen? – blacksite
Ich meine, ich möchte, dass das Skript die Zahlen von etwa 20 Smileys zählt und die "Anzahl von X in allen Dateien gleich ___________" (X = ein Smiley) für jeden ausgibt. Die Smileys enthalten :), :-),:] und einige weitere Varianten von positiven und negativen Smileys. –