鱼C论坛

 找回密码
 立即注册
查看: 7224|回复: 56

[技术交流] Python:每日一题 21(答题领鱼币)

[复制链接]
发表于 2017-4-6 19:26:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 新手·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 的题目,难倒了我(本来就新手...),但是有大佬给出了解答!(所以就是我的了

游客,如果您要查看本帖隐藏内容请回复


欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788 @lumber2388779   
点我上车

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-6 19:30:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-6 20:01:54 | 显示全部楼层
文件操作都有些忘了,看了一下几个模块的方法,慢慢写了起来。
先生成需要的文件吧,我可不想手动的一个个文件的建立。
  1. import os
  2. os.chdir('f:/filetest')
  3. for i in range(12345,12348):
  4.     for j in range(1,4):
  5.         with open('%d-%d.jpg'%(i, j), 'w'):
  6.             pass
复制代码


下面进入正题,先用listdir得到文件列表,再分解得到数字串号,建立目录,再移动文件。
  1. import os, os.path, shutil
  2. os.chdir('f:/filetest')
  3. for each in os.listdir():
  4.     if os.path.isfile(each):
  5.         path = each.split('-')[0]
  6.         if not os.path.exists(path):
  7.             os.mkdir(path)
  8.         shutil.move(each, './' + path + '/' + each)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-6 20:03:57 | 显示全部楼层
冬雪雪冬 发表于 2017-4-6 20:01
文件操作都有些忘了,看了一下几个模块的方法,慢慢写了起来。
先生成需要的文件吧,我可不想手动的一个个 ...

文件操作忘了,还能如此简短,不愧是大佬
这题我不会...学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-7 19:22:46 | 显示全部楼层
呦,来人啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 15:32:54 | 显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. import os

  3. def s_jpg(dir1):
  4.     """'# 判断指定文件夹下的文件type是不是图片'
  5.     'dir1 ,输入一个指定目录'
  6.     'dir_list,输入一个工作目录的目录List'
  7.     'return : 输出一个jpg文件收集的list"""
  8.     os.chdir(dir1)
  9.     print('当前目录是:',os.getcwd())
  10.     dir_list = os.listdir(os.curdir)
  11.     jpg_list = list()
  12.     for file in dir_list:
  13.         if os.path.isfile(file):
  14.             exten = os.path.splitext(file)
  15.             if exten[1] in '.jpg.JPG':
  16.                 jpg_list.append(file)
  17.     print('当前有%d个图片文件等待处理' % len(jpg_list))
  18.     return jpg_list

  19. def split_name(jpg_list):
  20.     """jpg_list 输入一个jpg文件收集的list'
  21.     '遍历文件做一个交集(set)dir_file,然后遍历dir_file去创建目录'
  22.     '遍历目录,文件夹,运用cmd的move命令把文件放进文件夹里面'
  23.     """
  24.     dir_file = set()
  25.     for file in jpg_list:
  26.         cut_name = file.split('_')
  27.         print(cut_name)
  28.         dir_file.add(cut_name[0])
  29.     # 开始创建目录
  30.     for N_dir in dir_file:
  31.         os.mkdir(N_dir)
  32.     # 遍历目录
  33.     for N_dir in dir_file:
  34.         # 遍历文件
  35.         for file in jpg_list:
  36.             cut_name = file.split('_')
  37.             if cut_name[0] == N_dir:
  38.                 # 运用cmd的move命令把 文件怼进去
  39.                 os.system('move "%s" "%s"' % (file, N_dir))

  40. # 开始工作
  41. dir1 = input('请输入你的工作(文件夹)目录:')
  42. jpg_list = s_jpg(dir1)
  43. split_name(jpg_list)
复制代码


如果不想用集合可以用try的方法,去遍历文件创建文件夹.
还有,我是看着硬盘的图片实际情况做的,他们命名格式多为'_'下划线作为分隔.如果想要改成像题目一样的话.可以改cut_name = file.split('_')这里.
新手刚学了1个月左右.

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 比我强~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 21:37:30 | 显示全部楼层
汗颜啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 22:51:39 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-4 21:34:53 | 显示全部楼层
  1. import os
  2. import shutil


  3. def new_path(path):
  4.     file_dict = {}
  5.     # 转换到当前文件夹
  6.     os.chdir(path)
  7.     files = os.listdir()

  8.     # 把jpg文件找出来,建字典区分文件名和数字串
  9.     for file in files:
  10.         if file[-3:] == 'jpg':
  11.             file_dict[file] = file.split('-')[0]
  12.         else: pass

  13.     # 新建文件夹,要防止文件夹已存在
  14.     for each_value in file_dict.values():
  15.         try:
  16.             os.mkdir(each_value)
  17.         except OSError: pass

  18.     # 移动文件
  19.     for each_key in file_dict.keys():
  20.         shutil.move(each_key, file_dict[each_key])
  21.         
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-15 20:59:13 | 显示全部楼层
本帖最后由 bozhen 于 2017-8-15 21:17 编辑
  1. # 默认'E:\A\C'下全是.jpg文件
  2. import os
  3. import shutil

  4. os.chdir(r'E:\A\C')
  5. dir_dict = dict()

  6. for each in os.listdir(os.curdir):
  7.     each_file = os.path.splitext(each)[0] # 去掉扩展名,只留文件名
  8.     each_file_id = each_file[:each_file.index('-')] # 去掉文件名中-以及后面的字符
  9.     dir_dict.setdefault(each,each_file_id)

  10. for each_file,each_id  in dir_dict.items():  # 依次创建文件夹
  11.     if not os.path.exists(each_id): # 文件夹不存在即创建
  12.         os.mkdir(each_id)
  13.    
  14.     shutil.move(each_file,each_id) # 依次将文件move到对应文件夹
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-18 19:26:12 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 11:10:20 | 显示全部楼层
学习,看看大神怎样写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-10 13:07:16 | 显示全部楼层
testing
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 11:18:36 | 显示全部楼层
本帖最后由 朔夜 于 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)[0]
            # 文件名分割,获取-前面的内容
            name=item.split("-")[0]
            # 去新路径下判断有没有以这个名字命名的文件夹
            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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 11:00:12 | 显示全部楼层
文件操作不太会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-31 16:43:32 | 显示全部楼层
看看隐藏内容是啥。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-9 15:24:56 | 显示全部楼层
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)[0]
    prefix = _filename.split('-')[0]
    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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-28 08:25:47 | 显示全部楼层
1 2 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-2 14:05:42 | 显示全部楼层
这题目有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-27 19:50:12 | 显示全部楼层
ls
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表