Python-从入门到实践

之前我一直用的是安卓手机,每次都装了谷歌套件,所以从11年开始到我开始用水果机这段时间内所有拍的照片都自动上传到了谷歌云盘。

之前一直没注意,因为我自己也有把照片上传到百度网盘的习惯,所以一直都不记得谷歌云盘里还有照片。

最近在清理百度云盘里的东西,打算把所有的资料转移到Onedrive和Dropbox里,无意之间发现谷歌云盘里还有照片,就顺便也清理了。

谷歌云盘有个毛病,它中间推出了“谷歌照片”这个应用,存规定大小的照片到里面不占用云盘空间,然后它把我之前云盘里所有的照片都自动转移到了谷歌照片这个应用里,然后又不能批量下载。不过还好,谷歌提供了takeout功能,可以打包你所有的数据,包括地图、邮件等各种的数据,我就用这个功能把所有的照片打包下载下来了。

没想到碰到一个坑,它里面所有的照片都是按日期分别放在不同的文件夹里的,每一天都是一个文件夹,这一天拍的所有照片都在同一个日期的文件夹里。我看了看,几百个文件夹…每个文件夹里除了照片还有一些照片格式的系统文件,这是让我手动挑照片的节奏。

手动挑不是不可能手动挑的,这辈子都不可能手动挑的。

前面自学了python,学完以后什么感觉都没有,只知道基础的语法有个毛线作用,正好现在可以付诸于行动了,让python来帮我挑照片。

现在的情况是这样,我有个根文件夹,根文件夹里面有几百个二级文件夹,然后每个二级文件夹里面又有一些文件,我现在需要把这个根文件夹里所有二级文件夹内的图片挑出来,复制到另外一个文件。

百度了一下,看看有没有现成的代码,现成例子是没有的,只有相似的,但是不能用在我这个上面,是用来读取文件名字然后用来生成一个文件列表,不过里面的一些代码可以借鉴一下。

它使用了OS和shutil库,我查了查这两个库的基础语法,首先OS库下os.listdir(path)可以用来列出路径下的文件和文件夹名,os.path.isfile(path)可以用来判断某个路径是否为文件(区别于文件夹),然后shutil库下shutil.copy(path1,path2)可以把路径1的文件复制到路径2,那么基本上我想要的功能就可以由这三个命令来实现了。

中间遇到了问题,首先我误解了path的意义,因为当时我在百度上查到的命令说明里并没有说明括弧里是路径,而我以为是文件名,结果一直报错;还有python读取到了文件以后,是不会自动生成路径的,也许是我没找到生成路径的方法,然后只能自己拼接,用os.path.join(DirPath,fileName),将当前的文件夹路径和读取到的文件的名字拼接。

我用了if和fileName[-4:]来判断读取到的文件是否为照片的格式(后缀名,比如.jpg,.png),这样就可以区别里面的文件是否为我需要复制出来的照片。

敲代码的时间很短,主要中间卡在那几个问题上了,解决完那几个问题以后,发现真的只有实践才能真的学到东西,这也就是知乎上有人说“跟着project学python”,因为这才是我学python真正的需求-应用于实践。