11,076
社区成员
目录
Day1的学习任务为:了解和使用Python,请同学们及时提交练习作业哟。
Day2我们开始学习Python文件目录操作,帮助大家掌握基本的目录操作
作为零基础甚至是负基础入门学习编程的用户,在阅读现有图书以及示例代码时经常会遇到一些障碍,其中关于磁盘文件、目录、文件类型、路径等计算机操作系统的基础知识使用及其广泛,如果不能很好的理解磁盘文件系统,不能熟练掌握路径的使用,将来在开发实际产品时会遇到很大障碍。顺便值得一提的是,新手开发遇到的严重bug中有近三层跟路径处理不正确有关。后续我们的实践案例中,几乎每一个案例都会涉及路径的操作。
很多普通用户日常使用计算机都在windows操作系统下进行,而很多开发者和设计师使用的是mac,我们的web应用的服务器端大部分都运行在Linux操作系统上。
Mac和Linux这一类操作系统他们被称为UNIX LIKE,都是符合POSIX标准的操作系统,因此他们在次盘文件和目录的管理方式上几乎完全相同,而windows则有一些差异。
在日常的磁盘文件管理中,我们主要使用的就是目录以及文件两种路径类型。刚接触计算机的新人通常把目录看作是一个容器,能在一个目录中装进去其他目录和文件,而文件中只存有自身的数据,无法在切分。因此,目录又叫文件夹,这种叫法源于微软早期操作系统。(如果深入理解磁盘管理的原理后,你可能就不会再把目录当成容器看待。但把目录当成是一个能装其他目录的容器更容易让人学会使用目录和路径,因此我们并不反对初学者用这样的比喻去理解它)
在windows中输入win+R键输入CMD命令可以打开CMD窗口,在窗口中可以运行DOS命令操作和管理磁盘文件和目录。
Windows操作系统中,打开资源管理器(我的电脑)会看到机器上所有安装的磁盘,这些磁盘可能是多块硬盘,也可以是一块硬盘通过分区切分出来的多个盘。
每个盘会有一个盘符,如 “C:\” 、 “D:\”、 “E:\”等,通常盘符是按字母表顺序排列的。
Windows的路径分隔符是”\”,对应汉子书写中的 捺 方向,windows中的路径默认不区分大小写字母
磁盘操作管理命令有很多,每个命令又对应若干参数,要学习和理解路径,我们至少要掌握cd、dir两个命令的基本用法。
cd命令是最常用的windows命令,用于切换当前的工作目录。cd 后的参数可以是盘符也可以是一个路径
cd d:
cd命令后跟盘符表述切换工作目录(当前目录)到对应的盘符的根目录下。
cd "c:\Program Files"
表述要进入c盘下的Program Files目录,注意这里cd命令后的路径用双引号引起来,是因为目录名称中有空格,如果没有引号,cd命令就无法准确识别目录名称。
dir命令用于查看目录结构(示例中盘符c:\为当前所在路径,不需要用户输入)
c:\dir
dir命令不带任何参数的条件下会列出当前目录下所有文件和文件夹(不包含隐藏文件)
dir 命令后跟路径则是查看对应目录下的文件和文件夹
在Mac和Linux桌面版可以打开一个叫终端的应用程序,进人shell命令窗口。
Linux中的磁盘文件管理命令比windows更丰富,更强大,但只需掌握 pwd 、ls 、cd 三个命令的基础用法即可。
Linux文件系统中没有盘符的概念,即便计算机安装多块硬盘,每块硬盘在使用时也是对应在整个目录树上的一个具体路径,把目录和磁盘关联的操作称为挂载。
Linux路径中的分隔符使用的是 / ,对应汉子书写中撇的方向,不同的磁盘分区格式对大小写敏感度有差别。
pwd命令查看当前工作目录
root@8dc787fe6938:/# pwd
/
cd 命令同windows能力相同,表示进入某个目录
由于没有了盘符,所有文件和文件夹都在以 / 为根的目录树之下,因此不像windows有切换盘符这样的操作。
要进入任何文件夹 只需要输入cd $PATH就可以了
如
root@8dc787fe6938:/# cd /var/log/
root@8dc787fe6938:/var/log# pwd
/var/log
ls命令与windows中dir作用相似,用于查看指定目录中的内容,如果不加路径参数,则查看当前目录中的内容。
如
root@8dc787fe6938:~# ls /etc/
adduser.conf fstab legal passwd selinux
alternatives gai.conf libaudit.conf profile shadow
apt group login.defs profile.d shells
bash.bashrc gshadow logrotate.d rc0.d skel
bindresvport.blacklist host.conf lsb-release rc1.d subgid
cron.d hostname machine-id rc2.d subuid
cron.daily hosts mke2fs.conf rc3.d sysctl.conf
debconf.conf init.d mtab rc4.d sysctl.d
debian_version issue networks rc5.d systemd
default issue.net nsswitch.conf rc6.d terminfo
deluser.conf kernel opt rcS.d update-motd.d
dpkg ld.so.cache os-release resolv.conf xattr.conf
e2scrub.conf ld.so.conf pam.conf rmt
environment ld.so.conf.d pam.d security
不管在windows中还是Linux中,甚至是网页上,路径都可以有2种书写方式,一种叫相对路径,一种叫绝对路径,这两种路径在配合命令使用后的结果可以等效,但选择不同的方式表示路径可能方便程度会有很大差别。
这里举一个例子说明,尽管我们不建议使用类比学习技术,但是恰当的类比能降低理解知识的门槛
如果有一栋大楼,房间编号是按面向大楼从左到右按以下规律来编制的
一层 01 、 02 、 03 、 04 、05 、06……
二层 01 、 02 、 03 、 04 、05 、06……
如果我当前在103房间,那么要找到104房间去取一个物品,我可以说在我右边第一间房去取。
我还可以说到一层第四间房去取。
第一种描述方式叫做相对路径,第二种方式叫绝对路径。
使用linux命令如下
root@8dc787fe6938:~# pwd
/root
root@8dc787fe6938:~# cd ../etc/
root@8dc787fe6938:/etc# pwd
/etc
root@8dc787fe6938:/etc# cd /root/
root@8dc787fe6938:~# pwd
/root
root@8dc787fe6938:~# ls ../var/
backups cache lib local lock log mail opt run spool tmp
root@8dc787fe6938:~# ls /var/
backups cache lib local lock log mail opt run spool tmp
上面的例子中 cd命令和ls命令都分别使用了相对路径和绝对路径两种方式运行,在操作系统中,.(英文句点)表示当前目录 ./var/表示当前目录下的var目录,../表示上一级目录
Python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。
我们启动python的repl,然后动手实验一把,>>>为python中 repl的提示符,#行表示注释
(base) baiyueguang@MacBook-Pro-2 ~ % python
Python 3.8.5 (default, Sep 4 2020, 02:22:02)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> # 导入os模块
>>> import os
>>>
>>> # 输出系统名称,由于我的操作系统是Mac OS,因此运行结果是posix,你可以看看你自己的运行结果
>>> os.name
'posix'
>>>
>>>#获取当前工作目录
>>> os.getcwd()
'/Users/chenyulong'
>>>
>>>#改变当前工作目录
>>> os.chdir('/Users/chenyulong/workspace')
>>> os.getcwd()
'/Users/chenyulong/workspace'
>>>
>>>#创建一个文件夹,由于使用的是相对路径,因此新建文件夹在当前工作目录下
>>> os.mkdir("test")
>>>
>>>#改变工作目录,进入上一步创建好的文件夹中
>>> os.chdir('./test')
>>> os.getcwd()
'/Users/chenyulong/workspace/test'
>>>
>>># 当前目录下创建两个目录a,b
>>> os.mkdir("a")
>>> os.mkdir("b")
>>> # 查看当前目录中的文件和文件夹
>>> os.listdir()
['a', 'b']
>>>
>>># 删除一个目录
>>> os.rmdir("a")
>>> 删除a目录后,再次查看当前目录,只剩下b目录了
>>> os.listdir()
['b']
经过上面的实验,我们掌握了基本的目录操作,下面是对常见磁盘文件目录操作的Python函数使用方法的总结,大家也可以去查阅官方手册,对函数有更详细的描述。(不用强记,需要的时候去查询即可)
① shutil.copyfile(“oldfile”,”newfile”) #oldfile和newfile都只能是文件
② shutil.copy(“oldfile”,”newfile”) #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copytree(“olddir”,”newdir”) #olddir和newdir都只能是目录,且newdir必须不存在
os.rename(“oldname”,”newname”) #文件或目录都是使用这条命令
① os.rmdir(“dir”) #只能删除空目录
② shutil.rmtree(“dir”) #空目录、有内容的目录都可以删
有了这些基础,我们可以尝试结合python语法来完成一些能在日常工作中大幅提升工作效率的小工具,比如在某个磁盘中搜索所有的图片文件并转存到指定的目录中。
在下一个任务中,我们将学会灵活的使用变量 循环 分支以及自定义函数