Such-Verzeichnis für spezielle Zeichenfolge
Ich versuche, eine Suche über ein bestimmtes Verzeichnis voll von header-Dateien, und schauen Sie durch jeden header-Datei, und wenn jede Datei hat einen string "struct" in ihm, ich will einfach nur das Programm zu drucken, die Datei ist es.
Habe ich das bisher, aber es funktioniert nicht richtig, können Sie mir helfen, es herauszufinden:
import glob
import os
os.chdir( "C:/headers" )
for files in glob.glob( "*.h" ):
f = open( files, 'r' )
for line in f:
if "struct" in line:
print( f )
- was genau funktioniert nicht?
- Bitte definieren Sie 'nicht richtig arbeiten'
- Es ist nicht etwas ausdrucken, obwohl ich Sie viel .h-Dateien mit der Zeile Struktur in dort.
- sind Sie die Schleife durch die Dateien?: for line in f: print(line)
- Die for-Schleife können Sie eine Datei zu einem Zeitpunkt, so ist es sollte
for file ...
(singular, ja, ich bin nick pflücken, aber es hilft, die Anstrengung des Denkens.) Zweitens sollten Sie eine Datei schließen, nachdem zu Ende Lesen. Ich empfehle die Verwendung derwith
konstruieren, um automatisch schließen Sie die Dateien. Dritte, f ist ein Datei-handle, nicht einen Dateinamen (string), soprint file
stattprint f
. - Eine Optimierung - wenn die Zeichenkette gefunden wird (nach der
print
), beenden Sie die Schleife mitbreak
- Sie wissen, in dieser Phase die Datei hat die Zeile, keine Notwendigkeit zu verbringen-Zyklen auf den rest des Inhalts.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, Sie sind daran interessiert, den Namen der Datei, nicht die Linie, so können wir Geschwindigkeit, was durch Lesen der gesamten Datei und Suche:
Mithilfe der
with
Konstrukt sorgt dafür dass die Datei ordnungsgemäß geschlossen. Die f.read () - Funktion liest die gesamte Datei.Update
Da das ursprüngliche Plakat erklärte, dass sein code wurde nicht gedruckt, schlage ich vor, legen Sie ein debugging-line:
Wenn Sie nicht sehen, jede Zeile, die mit 'DEBUG:', dann ist dein glob() zurückgegeben wird eine leere Liste. Das bedeutet, dass Sie landete in einem falschen Verzeichnis. Überprüfen Sie die Schreibweise für Ihr Verzeichnis, zusammen mit der directory-Inhalt.
Wenn Sie sehen, die 'DEBUG:' - Zeilen, aber nicht sehen, die beabsichtigte Ausgabe, Ihre Dateien eventuell nicht das 'struct' in in. Überprüfen Sie für diesen Fall durch die erste cd in das Verzeichnis, und geben Sie den folgenden DOS-Befehl ein:
Dieser funktioniert, wenn ich testen Sie es auf mein Ende:
Stellen Sie sicher, dass Sie drucken
f.name
, sonst bist du drucken Sie das file-Objekt, und nicht der name der Datei selbst.f.name
, getestet und es auf mein Ende. Funktioniert, wie erwartet.