Python 基于文件名创建目录

Python 基于文件名创建目录,python,filenames,directory,Python,Filenames,Directory,我是一个绝对的编程初学者,所以如果这真的是基本的,我道歉。我已经研究了其他似乎相关的问题,但还没有找到解决这个问题的方法——至少不是我能理解的 我需要生成一个目录中的文件列表;为每个文件创建一个单独的目录,目录名基于每个文件的名称;并将每个文件放在相应的目录中。以下是一些建议 要创建目录,请使用os.mkdir()。要移动文件,请使用os.rename()或shutil.move()。您应该查看、和库 我给你写了一个例子。这将删除给定文件夹中每个文件的文件扩展名,创建新的子目录,并将文件移动到相

我是一个绝对的编程初学者,所以如果这真的是基本的,我道歉。我已经研究了其他似乎相关的问题,但还没有找到解决这个问题的方法——至少不是我能理解的

我需要生成一个目录中的文件列表;为每个文件创建一个单独的目录,目录名基于每个文件的名称;并将每个文件放在相应的目录中。

以下是一些建议


要创建目录,请使用
os.mkdir
()。要移动文件,请使用
os.rename
()或
shutil.move
()。

您应该查看、和库

我给你写了一个例子。这将删除给定文件夹中每个文件的文件扩展名,创建新的子目录,并将文件移动到相应的文件夹中,即:

C:\Test\
 -> test1.txt
 -> test2.txt
将成为

C:\Test\
 -> test1\
    -> test1.txt
 -> test2\
    -> test2.txt
代码:

import glob, os, shutil

folder = 'C:/Test/'

for file_path in glob.glob(os.path.join(folder, '*.*')):
    new_dir = file_path.rsplit('.', 1)[0]
    os.mkdir(os.path.join(folder, new_dir))
    shutil.move(file_path, os.path.join(new_dir, os.path.basename(file_path)))
如果文件夹已存在,则会引发错误。要避免这种情况,请处理异常:

import glob, os, shutil

folder = 'C:/Test/'

for file_path in glob.glob(os.path.join(folder, '*.*')):
    new_dir = file_path.rsplit('.', 1)[0]
    try:
        os.mkdir(os.path.join(folder, new_dir))
    except WindowsError:
        # Handle the case where the target dir already exist.
        pass
    shutil.move(file_path, os.path.join(new_dir, os.path.basename(file_path)))

PS:这不适用于没有扩展名的文件。请考虑使用这样一个更健壮的代码。

你所说的“基于每个文件的名字”是什么意思?请具体说明。MelL2011可能是一个例子。例如,如果文件名是“代码> FoO ”,目录名应该是“代码> PrimeFixFoo</代码>吗?或者可能是首字母大写的
foo
?例如,在一个目录中,我有21个文件:7个基本名称为Austin,扩展名不同;七个命名为锡拉丘兹,具有相同的七个扩展;还有七个名为Davenport,同样有七个不同的扩展名。从我的脚本中,我希望能够读取此文件夹或任何文件夹,确定基本名称(本例中为Austin、Syracuse和Davenport),根据基本名称创建一个新文件夹(因此,三个名为Austin、Syracuse和Davenport的新文件夹),并将所有Austin文件移动到Austin文件夹中,将Syracuse文件移动到Syracuse文件夹中,并将Davenport文件转换为Davenport文件。有意义吗?(抱歉--我超时了,所以我现在重新提交了我的示例。)谢谢,我将研究这些主题!谢谢你所做的一切!我会试试看它是否对我有用。