Trouver un fichier de plusieurs contenant une chaîne de caractères souhaitée en Python
J'ai une chaîne de caractères comme 'pommes'. Je veux trouver cette chaîne, et je sais qu'il existe dans un seul des centaines de fichiers. par exemple,
file1
file2
file3
file4
file5
file6
...
file200
Tous ces fichiers sont dans le même répertoire. Quel est le meilleur moyen de trouver le fichier qui contient cette chaîne à l'aide de python, sachant que exactement un fichier qui le contient.
Je suis venu avec cette:
for file in os.listdir(directory):
f = open(file)
for line in f:
if 'apple' in f:
print "FOUND"
f.close()
et ce:
grep = subprocess.Popen(['grep','-m1','apple',directory+'/file*'],stdout=subprocess.PIPE)
found = grep.communicate()[0]
print found
Sont tous ces fichiers dans le même répertoire?
Oui, ils sont..
Oui, ils sont..
OriginalL'auteur E.Cross | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
Étant donné que les fichiers sont tous dans le même répertoire, nous venons d'obtenir une liste du répertoire.
Automatiquement obtient la liste des répertoires, et des vérifications pour s'assurer que toute donnée d'entrée est un fichier (pas un répertoire).
Il ouvre alors le fichier et lit ligne par ligne (pour éviter des problèmes avec la mémoire il ne veut pas le lire en une seule fois) et de la recherche la chaîne de caractères de chaque ligne.
Quand il trouve la cible de la chaîne, il imprime le nom du fichier.
Aussi, étant donné que les fichiers sont ouverts à l'aide
with
ils sont également automatiquement fermé lorsque nous sommes fait (ou une exception se produit).os.listdir('.')
renvoie les deux fichiers et de dossiers.Ma solution est très similaire, sauf que je ferme le fichier manuellement. Et je suis absolument certain que rien d'autre dans ce dossier est à chaque va être là à l'exception de ces fichiers, car ils sont générés par un autre programme. Selon vous, ce est la façon la plus rapide?
Oui, c'est vrai
si vous n'avez pas besoin de répertoires en inquiéter? Je pense en termes de l'écriture, ce en Python, je ne peux pas penser à un moyen plus rapide. Si la création d'un sous-processus pour frayer grep sera plus rapide dépendra probablement combien de fichiers que vous recherchez. La surcharge pour cela diminue en fonction du nombre de fichiers. De le savoir serait de temps.
Une différence est que votre code ne sera pas fermer les fichiers dans le cas d'une exception. Comme vous n'êtes pas inquiet au sujet de répertoires, la différence n'est pas significative dans votre cas, mais que le contrôle ordinaire serait une bonne idée d'avoir.
OriginalL'auteur Levon
OriginalL'auteur Ben
Pour des raisons de simplicité, on suppose que vos fichiers sont dans le répertoire courant:
OriginalL'auteur ninjagecko
un paresseux-évaluation, itertools approche fondée sur les
OriginalL'auteur iruvar