J'ai un gros fichier qui peut avoir des chaînes comme file_+0.txt, file_[]1.txt, file_~8.txt
etc.Python - Comment rechercher une chaîne dans un grand fichier
Je veux trouver le files_*.txt
manquant jusqu'à un certain nombre.
Par exemple, si je donne le fichier ci-dessous et un numéro 5, il faut dire que les disparus sont 1 and 4
asdffile_[0.txtsadfe
asqwffile_~2.txtsafwe
awedffile_[]2.txtsdfwe
qwefile_*0.txtsade
zsffile_+3.txtsadwe
J'ai écrit un script Python auquel je peux donner le chemin du fichier et un numéro et il me donnera tous les noms de fichiers qui manquent jusqu'à ce nombre.
Mon programme fonctionne pour les petits fichiers. Mais quand je donne un gros fichier (12MB) qui peut avoir des numéros de fichiers jusqu'à 10000, il se bloque.
Voici mon code actuel Python
#! /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()
sortie se bloque lorsque je donne un fichier de 12 Mo qui peut avoir des fichiers de 0 à 9999
$python findFileNumbers.py
Enter file path: abc.log
Enter end file number: 10000
sortie pour un petit fichier (comme ci-dessus exemple)
$python findFileNumbers.py
Enter file path: sample.log
Enter end file number: 5
[0, 2, 3]
[1, 4]
- Comment puis-je faire t son travail pour les gros fichiers?
- Y a-t-il une meilleure façon d'obtenir ces résultats au lieu d'un script Python?
Merci d'avance!
Grand en termes de quoi? Le nombre de fichiers à rechercher, la taille des données dans le fichier, la longueur de son nom? – Mark
J'ai donné un fichier de 12 Mo en entrée et le nombre de fichiers qu'il peut rechercher est de 10 000 – SyncMaster
Il n'est pas nécessaire de mapper les fichiers en mémoire si vous avez juste besoin de leur nom. – Mark