Ich habe eine große Datei zu suchen, die Strings wie file_+0.txt, file_[]1.txt, file_~8.txt
usw.Python - Wie eine Zeichenfolge in einer großen Datei
Ich will haben, die fehlenden files_*.txt
, bis eine bestimmte Zahl zu finden.
Zum Beispiel, wenn ich die folgende Datei geben und eine Nummer 5, sollte es sagen, dass die Vermissten sind 1 and 4
asdffile_[0.txtsadfe
asqwffile_~2.txtsafwe
awedffile_[]2.txtsdfwe
qwefile_*0.txtsade
zsffile_+3.txtsadwe
ich einen Python-Skript geschrieben, auf die ich kann den Dateipfad und eine Reihe geben und es wird mir alle Dateinamen geben, die bis zu dieser Nummer fehlen.
Mein Programm funktioniert für kleine Dateien. Aber wenn ich eine große Datei (12MB) gebe, die Dateinummern bis 10000 haben kann, hängt es einfach.
Hier ist mein aktueller Python-Code
#! /usr/bin/env/python
import mmap
import re
def main():
filePath = input("Enter file path: ")
endFileNum = input("Enter end file number: ")
print(filePath)
print(endFileNum)
filesMissing = []
filesPresent = []
f = open(filePath, 'rb', 0)
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
for x in range(int(endFileNum)):
myRegex = r'(.*)file(.*)' + re.escape(str(x)) + r'\.txt'
myRegex = bytes(myRegex, 'utf-8')
if re.search(myRegex, s):
filesPresent.append(x)
else:
filesMissing.append(x)
#print(filesPresent)
print(filesMissing)
if __name__ == "__main__":
main()
Ausgang hängt, wenn ich eine 12MB-Datei geben, die Dateien von 0 zu 9999
$python findFileNumbers.py
Enter file path: abc.log
Enter end file number: 10000
Ausgang für eine kleine Datei (gleichen wie oben haben kann Beispiel)
$python findFileNumbers.py
Enter file path: sample.log
Enter end file number: 5
[0, 2, 3]
[1, 4]
- Wie kann ich t machen seine Arbeit für große Akten?
- Gibt es eine bessere Möglichkeit, diese Ergebnisse anstelle eines Python-Skripts zu erhalten?
Vielen Dank im Voraus!
Groß in was? Die Anzahl der zu durchsuchenden Dateien, die Größe der Daten in der Datei, die Länge des Namens? – Mark
Ich gab eine 12MB-Datei als Eingabe und die Anzahl der Dateien, die es durchsuchen kann, ist 10.000 – SyncMaster
Es ist nicht erforderlich, die Dateien im Speicher abzubilden, wenn Sie nur ihre Namen abrufen müssen. – Mark