1

我正在尝试编写一些东西,递归地搜索路径和子目录以查找以“FFD8”的十六进制值开头的文件。我已经让它在运行脚本时使用参数参数中指定的位置,但是当它需要移动到子目录时问题就来了。

import string, sys, os
 os.chdir(sys.argv[1])
 for root, dir, files in os.walk(str(sys.argv[1])):
         for fp in files:
             f = open(fp, 'rb')
             data = f.read(2)
             if "ffd8" in data.encode('hex'):
                 print "%s starts with the offset %s" % (fp, data.encode('hex'))
             else:
                 print "%s starts wit ha different offset" % (fp)

我不知道为什么我需要使用 os.chdir 命令,但由于某种原因没有它,当脚本从我的桌面运行时,它会忽略参数并总是尝试从桌面目录运行搜索,无论我是什么路径指定。

这个的输出是autodl2.cfg starts wit ha different offset DATASS.jpg starts with the offset ffd8 IMG_0958.JPG starts with the offset ffd8 IMG_0963.JPG starts with the offset ffd8 IMG_0963_COPY.jpg starts with the offset ffd8 project.py starts wit ha different offset Uplay.lnk starts wit ha different offset Traceback (most recent call last): File "C:\Users\Frosty\Desktop\EXIF PROJECT\project2.py", line 15, in <module> f = open(fp, 'rb') IOError: [Errno 2] No such file or directory: 'doc.kml'

现在我知道为什么它在这里出错了,这是因为文件 doc.kml 位于桌面上的子文件夹中。任何人都可以了解更改目录的最简单方法,以便它可以继续扫描子目录而不会出现问题吗?谢谢!

4

1 回答 1

4

您需要使用绝对文件路径来打开它们,但files只列出没有路径的文件名。但是,该root变量确实包含当前目录的路径。

用于os.path.join加入两者:

for root, dir, files in os.walk(str(sys.argv[1])):
    for fp in files:
        f = open(os.path.join(root, fp), 'rb')
于 2012-12-04T18:18:58.777 回答