2016-12-29 62 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