基于文件名与文件夹Python

时间:2017-03-22 04:22:36

标签: python file sorting directory

我希望用Python编写脚本,而不是帮助我对文件基础文件名进行排序,如果名称不存在则为该名称创建一个dicrectory。

例如: 我在名为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(full_path)FileExistsError:[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)

1 个答案:

答案 0 :(得分:1)

os.path.isdir(path)会:

  

如果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

或者,ask forgiveness not permission

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