2016-12-29 232 views
0

我有以下腳本正確識別ASCII和非ASCII行,但我想每個文件,而不是每行的報告。由於我在循環內部有print,並且我有很多文件,所以輸出得太多了。 如何修改此代碼以獲得每個文件的單個輸出?它應該告訴我文件中是否有非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

刪除你在打印報表,並把打印語句'開放(文件)外...'上下文管理器,但裏面的'在文件...'塊 –

+1

如果你想想你的腳本結構,我認爲你將能夠確定解決方案。只需考慮在腳本評估內容中的每個條目時存儲要打印的信息,並在內部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

請記得妥善編輯問題,並接受讓SO妥善歸檔的答案。 – Prune