Python 基于文件名匹配和文件夹匹配的文件排序

Python 基于文件名匹配和文件夹匹配的文件排序,python,file,sorting,directory,Python,File,Sorting,Directory,我希望用Python编写一个脚本,帮助我将文件按一个文件名排序,如果不存在,则为该文件名创建一个目录 例如: 我在一个名为Unsorted的文件夹中有4个文件 111-iam.txt 111-how.txt 110-uare.txt 110-uok.txt 我想创建一个文件夹名111以保留所有文件名111-xxx.txt,创建文件夹名110以保留所有文件名110-xxx.txt 我想让它检查文件夹是否已经存在移动该文件夹中的文件,如果没有,然后创建一个新的文件夹 它在第一次运行时起作用,但如果我

我希望用Python编写一个脚本,帮助我将文件按一个文件名排序,如果不存在,则为该文件名创建一个目录

例如: 我在一个名为Unsorted的文件夹中有4个文件

111-iam.txt

111-how.txt

110-uare.txt

110-uok.txt

我想创建一个文件夹名111以保留所有文件名111-xxx.txt,创建文件夹名110以保留所有文件名110-xxx.txt

我想让它检查文件夹是否已经存在移动该文件夹中的文件,如果没有,然后创建一个新的文件夹

它在第一次运行时起作用,但如果我在未排序的文件夹名称中有一个以111或110开头的新文件,它会显示错误。 错误是os.mkdir(完整路径)文件existerror:[Errno 17]文件存在:'/home/pi/Desktop/Sorted/111' 这是我的密码

提前谢谢你们

import os
import shutil

srcpath = "/home/pi/Desktop/Unsorted"
srcfiles = os.listdir(srcpath)

destpath = "/home/pi/Desktop/Sorted"

# extract the ten letters from filenames and filter out duplicates
destdirs = list(set([filename[0:2] for filename in srcfiles]))


def create(dirname, destpath):
    full_path = os.path.join(destpath, dirname)
    os.mkdir(full_path)
    return full_path

def move(filename, dirpath):shutil.move(os.path.join(srcpath, filename),dirpath)

# create destination directories and store their names along with full paths
targets = [(folder, create(folder, destpath)) for folder in destdirs]

for dirname, full_path in targets:
    for filename in srcfiles:
        if dirname == filename[0:2]:
            move(filename, full_path)
将:

如果路径是现有目录,则返回True

因此,您可以将目录创建方法更改为:

import os.path
...
def create(dirname, destpath):
    full_path = os.path.join(destpath, dirname)
    if os.path.isdir(full_path):
        os.mkdir(full_path)
    return full_path
或者:


它显示错误-它显示了什么错误?别让我们猜!这可能是我们可以在不运行脚本的情况下立即解决的问题。请让我们很容易回答。对于丢失的信息,非常抱歉。错误是os.mkdir(完整路径)文件existerror:[Errno 17]文件存在:'/home/pi/Desktop/Sorted/111'
def create(dirname, destpath):
    full_path = os.path.join(destpath, dirname)
    try:
        os.mkdir(full_path)
    except FileExistsError:
        pass
    return full_path