文件夹的创建和文件的移动
知识点:
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