系统在计算md5/sha1时找不到具有空间的文件

2024-04-24 17:02:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的代码来生成一个目录中所有mp3文件的哈希代码。但系统对名称中有空格的文件抛出错误

目录-d:\song

AB目录中的文件CD.mp3, Abc.mp3, 国标mp3在

import os

dirname = 'd:\song'

def walk(dirname):
    names = []
    for name in os.listdir(dirname):
        path = os.path.join(dirname,name)
        if os.path.isfile(path):
            names.append(path)
        else:
            names.extend(walk(path))
    return names

def chk_dup(f):
    for i in f:
        cmd = 'fciv -md5 %s' % i.replace(' ','')
        fp = os.popen(cmd)
        res = fp.read()
        print(res)
        fp.close()

chk_dup(walk(dirname))

输出是

^{pr2}$

Tags: 文件path代码namein目录fornames
2条回答

你的文件是"AB CD.mp3",不是"ABCD.mp3"。因此,找不到文件"ABCD.mp3"。在

尝试使用'填充命令:

cmd = "fciv -md5 '%s'" % i

祝你好运!在

如果文件路径名参数包含空格,则可以用双引号将所有文件路径名参数括起来,从而解决当前的问题。这将使它被视为一个单一的论点,而不是其中的两个(或两个以上),否则的话。在

    for i in f:
        cmd = 'fciv -md5 "%s"' % i
        ...

但是,与其这么做,我建议您完全停止使用os.popen(),因为it has been deprecated since Python version 2.6,而是使用推荐的subprocess模块。除其他优点外,这样做将自动处理引用参数,其中包含空格。在

此外,利用内置的os.walk()函数来简化您自己的walk()函数也会很有用。在

合并这两个更改将导致代码看起来如下所示:

^{pr2}$

相关问题 更多 >