【问题标题】:Loop Through File Extensions, Looking for Non-ASCII Characters - Python循环遍历文件扩展名,寻找非 ASCII 字符 - Python
【发布时间】:2011-11-13 04:23:38
【问题描述】:

我编写了一个 Python 小程序,它通过目录(及其子目录)查找包含非 ASCII 字符的文件。

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

我的想法是进一步查看 Python 中 try/except 块的“except”部分中的文件,如下所示:

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 中有这么多很酷的函数,我敢肯定我错过了一些可以提供帮助的东西。

干杯。

【问题讨论】:

  • 我认为有比简单的排除列表更好的解决方案,但是你知道这样做不会很慢,你正在做一个简单的正则表达式或字符串比较。
  • 它可以帮助您调整自己的心态以使用正确的术语。在几乎所有现代系统上,文件都包含字节,而不是字符。因此,您正在寻找 128 或更大的字节值。这些是“非 ASCII”字节。如果您还想排除换行符、制表符等以外的控件,那么您将查找小于 32 和 127 的某些字节值。
  • 感谢有关术语的课程...我会尝试这样思考,也许它会帮助我对这些类型的问题的整体看法。

标签: python ascii file-extension file-encodings


【解决方案1】:

我想,既然没有任何答案,我可以继续自己用部分答案来回答这个问题。我基本上采用了一种不同的方法,并寻找一个特定的文件,该文件预计对于这个共享来说是丰富的,然后对每个文件都做同样的事情。这有点 hacky,但它会完成工作。

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 2013-01-08
    • 2013-06-18
    • 1970-01-01
    • 2023-03-23
    • 2018-10-14
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多