2016-12-29 5 views
0

Ich habe folgende Skript ordnungsgemäß identifiziert ASCII-und Nicht-ASCII-Zeilen, aber ich möchte einen Bericht für jede Datei, nicht pro Zeile. Da ich die drucken innerhalb der Schleife habe, und ich habe viele Dateien, bekomme ich viel zu viel ausgegeben. Wie kann ich diesen Code ändern, um eine einzelne Ausgabe pro Datei zu erhalten? Es sollte mir sagen, ob in der Datei irgendein Nicht-ASCII-Text vorhanden war.Python innerhalb von for-Schleife readlines einzigen Ausgang

import os 

for file in os.listdir('.'): 
    if file.endswith('.txt'): 

     with open(file) as f: 
      content = f.readlines() 

      for entry in content: 
       try: 
        entry.encode('ascii') 
       except UnicodeEncodeError: 
        print("it was not a ascii-encoded unicode string") 
        print(file) 
       else: 
        print("It may have been an ascii-encoded unicode string") 
        print(file) 
+1

Entfernen Sie die Druckanweisungen Sie haben, und legte eine print-Anweisung außerhalb der 'mit offenen (Datei) ...' Kontext-Manager, aber innerhalb der 'für Datei in ...' Block –

+1

Wenn denken Sie über die Struktur Ihres Skripts, ich denke, dass Sie in der Lage sein werden, die Lösung zu bestimmen. Denken Sie nur daran, die Informationen zu speichern, die Sie drucken möchten, während das Skript jeden Eintrag im Inhalt bewertet, und diese Informationen auszudrucken, wenn die innere for-Schleife abgeschlossen ist. –

+1

Das hängt davon ab, welchen Ausgang Sie möchten und unter welchen Bedingungen. Dein Programm ist klar geschrieben, um jede Zeile jeder Datei zu bewerten, also musst du uns eindeutig sagen, was du * willst *. – Prune

Antwort

1

Zum Beispiel, wenn Sie zeigen möchten, ob es jede Nicht-ASCII-Zeichenfolge in der Datei, halten Sie eine Flagge, Ihnen zu sagen, ob Sie eine schlechte Linie gefunden haben. Sie warten jedoch bis zum Ende der zu meldenden Datei.

import os 

for file in os.listdir('.'): 
    if file.endswith('.txt'): 

     with open(file) as f: 
      content = f.readlines() 
      good_file = True 

      for entry in content: 
       try: 
        entry.encode('ascii') 
       except UnicodeEncodeError: 
        good_file = False 

     if good_file: 
      print("It may have been an ASCII-encoded unicode string") 
     else: 
      print("it was not an ASCII-encoded unicode string") 

     print(file) 
+0

Vielen Dank, habe diesen Trick und ich habe gerade etwas gelernt :) – mtkilic

+0

Ausgezeichnet! Ein wichtiger Teil der Programmierung besteht darin, festzustellen, wann Sie genügend Informationen haben, um eine Entscheidung zu treffen - in diesem Fall wissen Sie nicht, was Sie drucken möchten, bis * Sie * die gesamte Datei gelesen haben. – Prune

+0

Bitte denken Sie daran, die Frage entsprechend zu bearbeiten und eine Antwort zu akzeptieren, damit SO dies ordnungsgemäß archiviert. – Prune