2011-11-13 53 views
1

我写了一个小小的Python程序,通过查看包含非ASCII字符的文件的目录(及其子目录)。通过文件扩展循环,寻找非ASCII字符 - Python

我想改善它。我知道这个“目录”中的某些文件可能是ZIP,DTA/OUT,OMX,SFD/SF3等...被连接成非ASCII字符的文件。所以我想知道这些在那里并且屏蔽那些不应该包含ASCII字符的字符,因为我的最终目标是找到不应该包含非ASCII字符的文件,这些文件不应该包含非ASCII字符并删除它们(具有TB值的坏扇区损坏的磁盘的重要数据)。

我的想法是通过能够在“除” /除了在Python块一试的部分看起来像这样的文件看得更远:

try: 
    content.encode('ascii') 
    output.write(str(counter) + ", " + file + ", ASCII\n") 
    print str(counter) + " ASCII file status logged successfully: " + file 
    counter += 1 

except UnicodeDecodeError: 
    output.write(str(counter) + ", " + file + ", non-ASCII\n") 
    print str(counter) + " non-ASCII file status logged successfully: " + file 
    counter += 1 

当我开始写代码,我意识到循环查询文件是否为'.zip''.sfd' pr '.omx'等...将是一个笨重的程序,并永远占用。

有没有什么办法可以逐一搜索一组文件扩展名?也许包含这些扩展名的文件需要检查?或者我没有想到的东西?如果这是一个愚蠢的问题,我很抱歉,但是Python中有很多很酷的功能,我相信我错过了一些可以提供帮助的东西。

干杯。

+0

我认为有一个比简单的排除列表更好的解决方案,但你知道这样做不会很慢,你正在做一个简单的正则表达式或字符串比较。 – brc

+0

它可能会帮助你的心理状态在正确的术语上自我调节。在几乎所有的现代系统中,文件都包含字节,而不是字符。所以你正在寻找128或更大的字节值。这些是“非ASCII”字节。如果您还想排除除换行符,制表符等之外的其他控件,那么您将查找小于32的特定字节值和127. – wberry

+0

感谢关于术语的课程......我会尝试这样思考,也许这将有助于我对这些问题的总体看法。 – nicorellius

回答

0

我的数字,因为我没有任何答案可以继续,并用部分答案自己回答。我基本上采取了不同的方法,并寻找一个特定的文件,预计这个共享会很丰富,然后将为每个文件做同样的事情。这是一种哈克式的,但它会完成任务。