==标题更新
为自己的转职设了一个简单的deadline,想看看自学这样一年可以学到什么程度,更重要的是这样写看起来比较俐落!
这样算不算是一种重构呢(?
==今天的课题
课本:https://reurl.cc/ROvEv6
练习3:设计一个函数返回给定文件名的后缀名。
后缀名在餵狗之后知道是副档名的意思(英文extension),也就是说今天要
1.设计一个函数,也就是有def与return
2.函数的功能可以让使用者输入文件名,并且return出文件的副档名
所以核心的功能应该是动用系统的功能来查询一遍并且找到符合使用者输入的名称,虽然不确定有没有这种模组,但总觉得import os应该不会让我失望
==先去上班
一阵寻找之后发现了os.listdir与fnmatch这两个好东西
前者的功能是可以帮我列出任意範围内的所有档案名称
而后者则是帮我比对输入的档名
把两者用for迴圈结合之后我就得到了一个能够找出档案的程式码
import osimport fnmatchfor file in os.listdir("/Users/mac/Desktop"): if fnmatch.fnmatch(file,'动动.gif'): print(file)
不过这时有两个问题
1.要输入完整档名才能得到完整档名(?)
2.没有input的地方
我想到上次可以改进的:没有用def跟预设值写、没有尽量使用变数来增加程式码的灵活度
还有从练习中学到的:佔位符可以用在任何字串中
重构之后
import fnmatchimport osdef find_name(path=input("请输入您要查询的资料夹路径")): file_name=input('请输入欲查找的文件名') if path =='': print('以预设资料夹Desktop进行查询') path=('/Users/mac/Desktop') for file in os.listdir(path): if fnmatch.fnmatch(file,'%s.*'%(file_name)): print(f"{file_name}的副档名为{file[-4:]}")find_name()
大功告成~~执行看看
接下来是对答案时间
def get_suffix(filename, has_dot=False): """ 获取文件名的后缀名 :param filename: 文件名 :param has_dot: 返回的后缀名是否需要带点 :return: 文件的后缀名 """ pos = filename.rfind('.') if 0 < pos < len(filename) - 1: index = pos if has_dot else pos + 1 return filename[index:] else: return ''
瞬间有种想留言「说明不正确,害我的老二卡进吊扇里」的冲动...
忙了我一天,原来题目只是想要一个字面上的「input全名,return副档名」功能
(是说这功能可以干嘛)
不过也因此学到了很多好东西~不算坏事啦
今天extra学到的小芝士:
mac对文件按右键以后再按alt(option)键后,原本的copy会变成copy path
今天的心得:
1.虽然说看错题目让我原本可以加快进度的机会没了,但也因此学到了不错的东西
2.事先把蓝图画好可以减少很多空想或钻牛角尖的时间
3.下次打了一长串文章后,决定发表之前记得先複製起来..........QQ