将文件用os.rename()函数重命名为其所在文件夹名称的一部分

3

我有多个文件夹,看起来像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))
1个回答

7
你的问题在于你的程序在启动时使用了工作目录来进行重命名操作。你需要提供完整的相对或绝对路径作为 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
@KennyC你的例子中complete是否真的在你的文件系统根目录(/)下? - bohney
我不确定我是否理解您的意思。outDirec是我正在尝试复制文件的目录的完整文件路径。 - KennyC
尝试在执行shutil.copy之前立即打印出两个路径,并验证它们是否正确。 - bohney
好的,我解决了文件路径问题,但是“迭代器”似乎无法附加到文件路径上。我收到了这个错误:shutil.Error: 'junk'和'junk'是同一个文件 - KennyC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接