学习python,每日练习0605

文件夹的创建和文件的移动

知识点:
1.os.listdir(path) path–需要列出的目录路径;返回的是指定路径的的文件或文件夹的名称
2.os.path.isdir(path)–判断路径是否为目录
3.os.path.isfile(path)–判断路径是否为文件
4.os.path.basename(path)–返回文件名
5.按要求移动文件or目录:shutil.move(“oldpos”,”newpos”)


'''
现在有一个文件夹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,把所有图片分类放到新建的文件夹中,规律就是按照图片前面的串号来分

程序思路:
1.得到每个图片的文件名称:os.listdir(path) path--需要列出的目录路径;返回的是指定路径的的文件或文件夹的名称
2.如何区分文件或者文件夹:os.path.isdir(path)--判断路径是否为目录;os.path.isfile(path)--判断路径是否为文件
3.获取文件名称:os.path.basename(path)--返回文件名
4.按要求移动文件or目录:shutil.move(“oldpos”,”newpos”)
'''

import os,shutil
path = "C:/Users/Lenovo/Desktop/Filetest"
listdir = os.listdir(path)
#根据图片名称创建子文件夹
for i in range(len(listdir)):
    #判断是否为文件而不是文件夹
    if os.path.isfile(path+"/"+listdir[i]):
        filename = os.path.basename(path+"/"+listdir[i])
        #如果文件不存在则创建文件
        if os.path.isdir(path+"/"+filename.split(".")[0].split("-")[0]) == False:
            os.mkdir(path+"/"+filename.split(".")[0].split("-")[0])
#判断文件和文件夹名称相同则进行移动操作
for i in range(len(listdir)):
    if os.path.isfile(path+"/"+listdir[i]):
        print(path+"/"+listdir[i])
        print(path+"/"+listdir[i].split(".")[0].split("-")[0])
        shutil.move(path+"/"+listdir[i],path+"/"+listdir[i].split(".")[0].split("-")[0])

结果:
C:/Users/Lenovo/Desktop/Filetest/123-1.jpg
C:/Users/Lenovo/Desktop/Filetest/123
C:/Users/Lenovo/Desktop/Filetest/123-2.jpg
C:/Users/Lenovo/Desktop/Filetest/123
C:/Users/Lenovo/Desktop/Filetest/123-3.jpg
C:/Users/Lenovo/Desktop/Filetest/123
C:/Users/Lenovo/Desktop/Filetest/12345-1.jpg
C:/Users/Lenovo/Desktop/Filetest/12345
C:/Users/Lenovo/Desktop/Filetest/234-1.jpg
C:/Users/Lenovo/Desktop/Filetest/234
C:/Users/Lenovo/Desktop/Filetest/234-2.jpg
C:/Users/Lenovo/Desktop/Filetest/234
C:/Users/Lenovo/Desktop/Filetest/345-1.jpg
C:/Users/Lenovo/Desktop/Filetest/345

嵌套的多维列表变为一维列表

关键点:
递归调用

'''

出一道简单的题。把一个嵌套的多维列表变为一维列表,如:
list1 = [1, [2], [3, 4], [[5, 6], 7], [8, [[9, [10], 11], 12], 13]]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
'''
list1 = [1, [2], [3, 4], [[5, 6], 7], [8, [[9, [10], 11], 12], 13]]
list2 = []

def fun(list):
    global list2
    for i in range(len(list)):
        if type(list[i]) == int:
            list2.append(list[i])
        else:
            fun(list[i])

fun(list1)
print(list2)

结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

判断两个日期相差多少天

'''

小陆每天要写一份工作日报,日报标准是“入职第X天-小陆”,对于“入职第几天”,小陆现在每次需要对上次写的日报标题里的天数+1。

请你写一段程序,帮小陆自动完成这件事。

提供写日期当天的年月日,算出已入职的天数(假定小陆的入职时间是 2014年8月18日)。

现在是2017年4月19日,问小陆上班几天了?

要求:不能使用时间,日期相关的库函数。

'''

#定义一个方法,来判断这一天是这一年的第几天:

def fun(year,month,day):
    # 定义天数的list
    listDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    # 定义theDay来存放是这一年的第几天
    theDay = 0
    if  month == 2:
        theDay = 31 + day
    elif month == 1:
        theDay = day
    elif month>2:
        if year%4 == 0 and year%100 != 0 or year%400 == 0:
            for i in range(1,month):
                theDay += listDay[i-1]
            theDay = theDay+1+day
        else:
            for i in range(1,month):
                theDay += listDay[i-1]
            theDay =theDay+day
    return theDay

day = fun(2015,12,31)+fun(2016,12,31)+fun(2017,4,19)+fun(2014,12,31)-fun(2014,8,18)+1
print(day)

结果
976

题目来源:https://fishc.com.cn/forum.php?mod=viewthread&tid=85324&ctid=588

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值