正如你所看到的,这非常笨重。我将如何自动检测文件扩展名?
txt_files = glob('*txt')
png_files = glob('*.png')
jpg_files = glob('*.jpg')
zip_files = glob('*.zip')
gif_files = glob('*.gif')
iso_files = glob('*iso')
epub_files = glob('*epub')
ico_files = glob('*.ico')
#Unimportant bit to question
for n in txt_files:
move_files(n, 'txt')
for n in png_files:
move_files(n, 'png')
for n in jpg_files:
move_files(n, 'jpg')
for n in zip_files:
move_files(n, 'zip')
for n in gif_files:
move_files(n, 'gif')
for n in iso_files:
move_files(n, 'iso')
for n in epub_files:
move_files(n, 'epub')
for n in ico_files:
move_files(n, 'ico')
答案 0 :(得分:3)
要“自动检测新扩展程序”,只需浏览所有文件并查看其扩展程序:
for f in os.listdir():
name, ext = os.path.splitext(f)
ext = ext.lstrip('.')
if ext:
os.mkdirs(ext)
move_file(filename, ext)
请注意,如果您的某些“扩展程序”实际上不是扩展程序,则无法使用此功能。我注意到您现有的代码会搜索*txt
和*iso
等内容,这些内容当然会匹配this_is_not_txt
和spam.aniso
等内容。如果这是一个必需的功能而不是一个错误,那么在你可以在代码中实现它之前,你将不得不为“扩展”提出一些规则......
另请注意,根本没有扩展名的文件将保留原样(因为if ext:
),而扩展名为空的文件(只有.
)也是如此(因为在if
之后进行lstrip
检查。当然,如果需要,您可以更改其中任何一个(尽管您需要提供一个子目录名称,该名称不可能与任何可能的实际扩展名不明确...)。
最后,这不会处理“双扩展” - 例如,.tar.gz
文件将与.gz
进入同一目录。同样,如果需要,这很容易改变。
答案 1 :(得分:0)
for ext in "txt png jpg zip gif iso epub ico".split():
for file in glob("*.%s"%ext): #if there are no files of this type it just skips it
move_files(file,ext)
可能?不清楚你的问题是什么
在某种意义上,这是“自动检测到”,因为如果没有符合该模式的文件,它将跳过move_files
步骤