Python:每日一题 21(答题领鱼币)
本帖最后由 新手·ing 于 2017-4-7 19:23 编辑现在有一个文件夹Filetest,文件夹中有大量的图片
图片的名称是这样的12345-1.jpg、23456-1.jpg、12345-2.jpg、12345-3.jpg...
图片的数量很多,格式都是数字串号+横杠+图片编号
现在需要进行操作:
1,在Filetest文件夹中建立子文件夹,子文件夹的个数由图片的前面一个数字串号来决定,例如,上面的图片12345-1.jpg、12345-2.jpg、12345-3.jpg这三个需要建立一个文件夹名称为12345的文件夹,依次类推
2,把所有图片分类放到新建的文件夹中,规律就是按照图片前面的串号来分
感谢@gopythoner 的题目,难倒了我(本来就新手...),但是有大佬给出了解答!(所以就是我的了{:10_256:} )
**** Hidden Message *****
欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788 @lumber2388779
{:10_298:} 点我上车{:10_298:} @gopythoner @lumber2388779 @ooxx7788 @冬雪雪冬
来来来! 文件操作都有些忘了,看了一下几个模块的方法,慢慢写了起来。
先生成需要的文件吧,我可不想手动的一个个文件的建立。
import os
os.chdir('f:/filetest')
for i in range(12345,12348):
for j in range(1,4):
with open('%d-%d.jpg'%(i, j), 'w'):
pass
下面进入正题,先用listdir得到文件列表,再分解得到数字串号,建立目录,再移动文件。
import os, os.path, shutil
os.chdir('f:/filetest')
for each in os.listdir():
if os.path.isfile(each):
path = each.split('-')
if not os.path.exists(path):
os.mkdir(path)
shutil.move(each, './' + path + '/' + each)
冬雪雪冬 发表于 2017-4-6 20:01
文件操作都有些忘了,看了一下几个模块的方法,慢慢写了起来。
先生成需要的文件吧,我可不想手动的一个个 ...
{:10_250:}文件操作忘了,还能如此简短,不愧是大佬{:10_297:}
这题我不会...学习了{:10_254:} 呦,来人啊 # -*- coding: utf-8 -*-
import os
def s_jpg(dir1):
"""'# 判断指定文件夹下的文件type是不是图片'
'dir1 ,输入一个指定目录'
'dir_list,输入一个工作目录的目录List'
'return : 输出一个jpg文件收集的list"""
os.chdir(dir1)
print('当前目录是:',os.getcwd())
dir_list = os.listdir(os.curdir)
jpg_list = list()
for file in dir_list:
if os.path.isfile(file):
exten = os.path.splitext(file)
if exten in '.jpg.JPG':
jpg_list.append(file)
print('当前有%d个图片文件等待处理' % len(jpg_list))
return jpg_list
def split_name(jpg_list):
"""jpg_list 输入一个jpg文件收集的list'
'遍历文件做一个交集(set)dir_file,然后遍历dir_file去创建目录'
'遍历目录,文件夹,运用cmd的move命令把文件放进文件夹里面'
"""
dir_file = set()
for file in jpg_list:
cut_name = file.split('_')
print(cut_name)
dir_file.add(cut_name)
# 开始创建目录
for N_dir in dir_file:
os.mkdir(N_dir)
# 遍历目录
for N_dir in dir_file:
# 遍历文件
for file in jpg_list:
cut_name = file.split('_')
if cut_name == N_dir:
# 运用cmd的move命令把 文件怼进去
os.system('move "%s" "%s"' % (file, N_dir))
# 开始工作
dir1 = input('请输入你的工作(文件夹)目录:')
jpg_list = s_jpg(dir1)
split_name(jpg_list)
如果不想用集合可以用try的方法,去遍历文件创建文件夹.
还有,我是看着硬盘的图片实际情况做的,他们命名格式多为'_'下划线作为分隔.如果想要改成像题目一样的话.可以改cut_name = file.split('_')这里.
{:10_266:}新手刚学了1个月左右. 汗颜啊 kankan
import os
import shutil
def new_path(path):
file_dict = {}
# 转换到当前文件夹
os.chdir(path)
files = os.listdir()
# 把jpg文件找出来,建字典区分文件名和数字串
for file in files:
if file[-3:] == 'jpg':
file_dict = file.split('-')
else: pass
# 新建文件夹,要防止文件夹已存在
for each_value in file_dict.values():
try:
os.mkdir(each_value)
except OSError: pass
# 移动文件
for each_key in file_dict.keys():
shutil.move(each_key, file_dict)
本帖最后由 bozhen 于 2017-8-15 21:17 编辑
# 默认'E:\A\C'下全是.jpg文件
import os
import shutil
os.chdir(r'E:\A\C')
dir_dict = dict()
for each in os.listdir(os.curdir):
each_file = os.path.splitext(each) # 去掉扩展名,只留文件名
each_file_id = each_file[:each_file.index('-')] # 去掉文件名中-以及后面的字符
dir_dict.setdefault(each,each_file_id)
for each_file,each_idin dir_dict.items():# 依次创建文件夹
if not os.path.exists(each_id): # 文件夹不存在即创建
os.mkdir(each_id)
shutil.move(each_file,each_id) # 依次将文件move到对应文件夹 学习学习 学习,看看大神怎样写的 testing 本帖最后由 朔夜 于 2017-10-18 11:26 编辑
def fun(temp):
# 输入一条目录
items=os.listdir(temp)
# 循环目录下的所有文件
for each in items:
# 判断文件是否是文件还是目录
if os.path.isfile(each):
item=os.path.splitext(each)
# 文件名分割,获取-前面的内容
name=item.split("-")
# 去新路径下判断有没有以这个名字命名的文件夹
if os.path.exists("D:/path"+name):
# 如果存在就将文件移动到这个文件夹内
shutil.move(each, "D:/path"+name)
else:
# 如果不存在就新建一个文件夹,并将文件存入
os.mkdir("D:/path"+name)
shutil.move(each, "D:/path" + name)
else:
# 如果是目录的滑回调函数
fun(each) 文件操作不太会
看看隐藏内容是啥。 import os
import shutil
filenames = []
curdir = os.getcwd()
if os.path.isdir(curdir):
os.chdir(curdir)
filelist = os.listdir(curdir)
for file in filelist:
if file.endswith('.jpg'):
filenames.append(file)
for filename in filenames:
_filename = os.path.splitext(filename)
prefix = _filename.split('-')
if not os.path.isdir(os.path.join(curdir, prefix)):
os.mkdir(prefix)
shutil.move(os.path.join(curdir, filename), os.path.join(curdir, prefix, filename))
else:
shutil.move(os.path.join(curdir, filename), os.path.join(curdir, prefix, filename)) 1 2 3 这题目有意思 ls