【问题标题】:os.rename() file to part of folder nameos.rename() 文件到文件夹名称的一部分
【发布时间】:2012-09-26 15:32:17
【问题描述】:

我有多个看起来像 folder.0folder.1 的文件夹。 在每个文件夹中都有一个文件 ('junk'),我想将其复制并重命名为当前所在文件夹名称的 .0.1 部分。
这是我想要做的:

inDirec = '/foobar'
outDirec = '/complete/foobar'


for root, dirs,files in os.walk(inDirec):
    for file in files:
        if file =='junk'
            d = os.path.split(root)[1]
            filename, iterator = os.path.splitext(d)  # folder no. captured
            os.rename(file, iterator+file) # change name to include folder no.
            fullpath = os.path.join(root,file)
            shutil.copy(fullpath,outDirec)

这会返回:

os.rename(file,iterator+file)
OSError: [Errno 2] No such file or directory

我什至不确定我应该使用 os.rename。我只想提取files == 'junk' 并将它们复制到一个目录,但它们都具有完全相同的名称。所以我真的只需要重命名它们,这样它们就可以存在于同一个目录中。有什么帮助吗?

更新

    for root, dirs,files in os.walk(inDirec):
    for file in files:
        if file =='junk'
            d = os.path.split(root)[1]
            filename, iterator = os.path.splitext(d)  # folder no. captured
            it = iterator[-1] # iterator began with a '.'
         
            shutil.copy(os.path.join(root,file),os.path.join(outDirec,it+file))

【问题讨论】:

    标签: python operating-system rename


    【解决方案1】:

    您的问题是您的程序在启动时使用工作目录进行重命名操作。您需要提供完整的相对或绝对路径作为 os.rename() 的参数。

    替换:

    os.rename(file, iterator+file)
    fullpath = os.path.join(root,file)
    shutil.copy(fullpath,outDirec)
    

    与(如果你想移动):

    os.rename(os.path.join(root, file), os.path.join(outDirec, iterator+file))
    

    或者用(如果你想复制的话):

    shutil.copy(os.path.join(root, file), os.path.join(outDirec, iterator+file))
    

    注意:目标目录应该已经存在,否则您将需要代码来创建它。

    【讨论】:

    • 谢谢。目标目录 = outDirec 存在。但是,当尝试你的后一行 shutil 我得到 IOError: [Errno 20] Not a directory:
    • @KennyC 正如您的示例所暗示的那样,complete 实际上是文件系统的根目录 (/)?
    • 我不确定我是否在关注你。 outDirec 是我试图复制文件的目录的完整文件路径
    • 尝试在执行 shutil.copy 之前立即打印出两条路径并验证它们是否正确。
    • 好的,我发现了文件路径问题,但iterator 似乎没有附加到文件路径。我收到此错误:shutil.Error: 'junk' and 'junk' are the same file
    猜你喜欢
    • 2017-06-07
    • 2017-04-16
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多