2016-12-29 12 views
0

私は次のスクリプトでASCIIとASCII以外の行を正しく識別していますが、行ごとではなく各ファイルのレポートが必要です。ループ内にの印刷があり、多くのファイルがあるので、出力が大きすぎます。 ファイルごとに1つの出力を得るためにこのコードを変更するにはどうすればよいですか?ファイルにASCII以外のテキストがあるかどうかを教えてください。例えばPython内部forループreadlines単一出力

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

あなたが考える場合は、持っているprint文を削除し、 'オープンで(ファイル)の外にprint文を入れて...'コンテキストマネージャが、 'ファイルの中に...'ブロック –

+1

内部あなたのスクリプトの構造、私はあなたが解決策を決定することができると思います。スクリプトがコンテンツ内の各エントリを評価している間に、印刷したい情報を格納し、inner forループが完了したときにその情報を出力することを考えてください。 –

+1

これは、どの出力を必要としているか、どのような条件で出力されているかによって異なります。あなたのプログラムはすべてのファイルのすべての行を評価するために明記されているので、あなたが何をしたいのかを明確に伝える必要があります。 – Prune

答えて

1

ご非ASCII文字列をファイルにがあったかどうかを表示したい場合は、あなたが悪いの行を見つけたかどうかを伝えるためにフラグを維持します。ただし、ファイルの最後まで報告するまで待機します。

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

本当にありがとう、このトリックでしたし、私はちょうど何かを学んだ:) – mtkilic

+0

優秀!プログラミングの重要な部分は、決定するのに十分な情報がいつあるかを判断することです。この場合は、ファイル全体を読む*後*までに印刷する内容がわかりません。 – Prune

+0

質問を適切に編集し、これを適切に保管するための回答を受け入れることを忘れないでください。 – Prune

関連する問題