2017-09-19 12 views
0

J'ai besoin d'aide. J'ai besoin de créer une fonction qui va analyser les fichiers texte avec des lignes de 500 caractères ou plus. Le code est écrit que je ci-dessous:Recherche de fichiers avec des lignes de longueur supérieure à 500 caractères

import os 
from os.path import join 
place = raw_input('Enter path: ') 
for f in os.listdir(place): 
    newlist = [] 
    if f.endswith(".txt"): 
      newlist.append(f) 
    for i in newlist: 
     with open(join(place, i)) as fi: 
      for line in fi: 
       if len(line) > 350: 
        print(place, i) 

semble donc l'idée est d'imprimer l'emplacement du fichier et le nom du fichier si la longueur est au-dessus 500. Cependant, il ne doit pas être le faire, comme je connais un fichier de plus de 700 qu'il ne trouve tout simplement pas. Des idées?

+0

mis 'newlist = []' avant la principale boucle, plus, je suppose que vous devez exécuter la deuxième boucle lorsque les premières finitions – MedAli

+0

Définir l'expression « caractères ». Cela peut signifier diversement: octets, unités de code, points de code, grappes de graphèmes hérités, grappes de graphèmes étendus, glyphes, ... – o11c

+0

Cela a effectivement fonctionné, merci @MedAli –

Répondre

0
  1. Vous devez mettre newlist = [] avant pour les boucles sinon il devient vide, à chaque itération.
  2. Exécutez la seconde boucle après la fin du premier, de sorte que newlist soit rempli avant de parcourir.

Voilà comment le code ressemble après les modifications proposées:

import os 
from os.path import join 
place = raw_input('Enter path: ') 

newlist = [] 

for f in os.listdir(place): 
    if f.endswith(".txt"): 
      newlist.append(f) 

for i in newlist: 
    with open(join(place, i)) as fi: 
     for line in fi: 
      if len(line) > 350: 
       print(place, i) 
0

Cela obtenir la taille du fichier initialement mentionné dans la description de la question

import os 
b = os.path.getsize("/path/filename.fileextension") 
if len(b) > 500: 
    ... 

mais si vous voulez que la longueur de la ligne que j'éditables, comme il est mentionné sur le titre de la question d'aller avec d'autres approche (en fait le vôtre est ok)

with open("/path/filename.ext") as f: 
    for line in f: 
    if len(line) > 500: 
     ... 
     # Where you can do it 
+0

Ce n'est pas ce que OP recherche. Ils veulent trouver des fichiers avec des lignes de longueur supérieure à 500, pas la taille totale 500. –

+0

@COLDSPEED juste lire la question si vous le pouvez, n'importe où dit les fichiers avec une longueur de ligne de plus de 500 ???? – Serjik

+0

Oui, c'est dans le titre. En outre, je n'ai pas déprécié. –

1

Cela permet de maintenir un compte cumulatif de la longueur de chaque ligne. Une fois que cela dépasse 350, il ajoute le nom de fichier à la liste des résultats et continue la recherche.

import os 

place = raw_input('Enter path: ') 
text_files = [f for f in os.listdir(place) if f.endswith('.txt')] 
results = [] 
for f in text_files: 
    with open(os.path.join(place, f)) as fin: 
     count = 0 
     for line in fin: 
      count += len(line) 
      if count > 350: 
       results.append(f) 
       break