Python 3.x 基于文件和文件夹名称在python中移动文件

Python 3.x 基于文件和文件夹名称在python中移动文件,python-3.x,directory,shutil,Python 3.x,Directory,Shutil,python相对较新(不是每天都使用)。然而,我试图简化一些事情。我基本上有长名称的键,但是键(或文件名)的子集具有与相关文件夹相同的序列。{请原谅缩进,它正确缩进。} 文件1应该是:101010-CDFGH-8271.dat,文件夹是CDFGH-82 文件2是:101010-QWERT-7425.dat,文件夹是QWERT-74 import os import glob import shutil files = os.listdir("files/location") dest_1 =

python相对较新(不是每天都使用)。然而,我试图简化一些事情。我基本上有长名称的键,但是键(或文件名)的子集具有与相关文件夹相同的序列。{请原谅缩进,它正确缩进。}

文件1应该是:101010-CDFGH-8271.dat,文件夹是CDFGH-82 文件2是:101010-QWERT-7425.dat,文件夹是QWERT-74

import os
import glob
import shutil


files = os.listdir("files/location")
dest_1 = os.listdir("dest/location")

for f in files:
    file = f[10:21]

for d in dest_1:
    dire = d

if file == dire:
    shutil.move(file, dest_1)
代码运行时没有错误,但是没有任何移动。期待您的回复和学习机会

抱歉,已更新格式。

请尝试以下变体:

basedir = "dest/location"

for fname in os.listdir("files/location"):
    dirname = os.path.join(basedir, fname[10:21])
    if os.path.isdir(dirname):
        path = os.path.join("files/location", fname)
        shutil.move(path, dirname)

此外,这些文件的名称不一样,但是这个范围是我所需要的。考虑使用正确的缩进,所以if语句在for循环中(可能是嵌套for循环)。请看一下有关代码格式化的内容。在没有格式化代码的情况下,我不得不猜测缩进是什么,因此我假设缩进是最基本的。您的错误可能是您使用文件名的子集来分配给
文件(与目录名进行比较),然后还要移动相同的子集文件名,而不是原来的文件名。我认为你的第一个评论是对的。如果我执行上述语句,我会得到一个文件或目录不存在的错误。如果我散列出shutil行,并在满足条件的情况下执行打印(“true”),它将打印true。