【7天学习计划】Day2学习任务:Python文件目录操作

社区运营 社区运营组 2021-09-16 19:06:15

目录

一、为什么要先从磁盘文件与路径开始

二、 磁盘文件目录管理命令回顾

1. windows磁盘文件管理

① CD命令

② DIR命令

2. Linux磁盘文件管理

① PWD命令

② CD命令

③ LS命令

2. 相对路径和绝对路径

三、Python文件目录管理



Day1的学习任务为:了解和使用Python,请同学们及时提交练习作业哟。

Day2我们开始学习Python文件目录操作,帮助大家掌握基本的目录操作


一、为什么要先从磁盘文件与路径开始

作为零基础甚至是负基础入门学习编程的用户,在阅读现有图书以及示例代码时经常会遇到一些障碍,其中关于磁盘文件、目录、文件类型、路径等计算机操作系统的基础知识使用及其广泛,如果不能很好的理解磁盘文件系统,不能熟练掌握路径的使用,将来在开发实际产品时会遇到很大障碍。顺便值得一提的是,新手开发遇到的严重bug中有近三层跟路径处理不正确有关。后续我们的实践案例中,几乎每一个案例都会涉及路径的操作。

二、 磁盘文件目录管理命令回顾

很多普通用户日常使用计算机都在windows操作系统下进行,而很多开发者和设计师使用的是mac,我们的web应用的服务器端大部分都运行在Linux操作系统上。

Mac和Linux这一类操作系统他们被称为UNIX LIKE,都是符合POSIX标准的操作系统,因此他们在次盘文件和目录的管理方式上几乎完全相同,而windows则有一些差异。

在日常的磁盘文件管理中,我们主要使用的就是目录以及文件两种路径类型。刚接触计算机的新人通常把目录看作是一个容器,能在一个目录中装进去其他目录和文件,而文件中只存有自身的数据,无法在切分。因此,目录又叫文件夹,这种叫法源于微软早期操作系统。(如果深入理解磁盘管理的原理后,你可能就不会再把目录当成容器看待。但把目录当成是一个能装其他目录的容器更容易让人学会使用目录和路径,因此我们并不反对初学者用这样的比喻去理解它)

1. windows磁盘文件管理

在windows中输入win+R键输入CMD命令可以打开CMD窗口,在窗口中可以运行DOS命令操作和管理磁盘文件和目录。

Windows操作系统中,打开资源管理器(我的电脑)会看到机器上所有安装的磁盘,这些磁盘可能是多块硬盘,也可以是一块硬盘通过分区切分出来的多个盘。

每个盘会有一个盘符,如 “C:\” 、 “D:\”、 “E:\”等,通常盘符是按字母表顺序排列的。

 

Windows的路径分隔符是”\”,对应汉子书写中的 方向,windows中的路径默认不区分大小写字母

磁盘操作管理命令有很多,每个命令又对应若干参数,要学习和理解路径,我们至少要掌握cd、dir两个命令的基本用法。

① CD命令

cd命令是最常用的windows命令,用于切换当前的工作目录。cd 后的参数可以是盘符也可以是一个路径

cd d:

cd命令后跟盘符表述切换工作目录(当前目录)到对应的盘符的根目录下。

cd "c:\Program Files"

表述要进入c盘下的Program Files目录,注意这里cd命令后的路径用双引号引起来,是因为目录名称中有空格,如果没有引号,cd命令就无法准确识别目录名称。

 

② DIR命令

dir命令用于查看目录结构(示例中盘符c:\为当前所在路径,不需要用户输入)

c:\dir

dir命令不带任何参数的条件下会列出当前目录下所有文件和文件夹(不包含隐藏文件)

dir 命令后跟路径则是查看对应目录下的文件和文件夹

2. Linux磁盘文件管理

在Mac和Linux桌面版可以打开一个叫终端的应用程序,进人shell命令窗口。

Linux中的磁盘文件管理命令比windows更丰富,更强大,但只需掌握 pwd 、ls 、cd 三个命令的基础用法即可。

Linux文件系统中没有盘符的概念,即便计算机安装多块硬盘,每块硬盘在使用时也是对应在整个目录树上的一个具体路径,把目录和磁盘关联的操作称为挂载。

Linux路径中的分隔符使用的是 / ,对应汉子书写中撇的方向,不同的磁盘分区格式对大小写敏感度有差别。

① PWD命令

pwd命令查看当前工作目录

root@8dc787fe6938:/# pwd

/

cd 命令同windows能力相同,表示进入某个目录

② CD命令

由于没有了盘符,所有文件和文件夹都在以 / 为根的目录树之下,因此不像windows有切换盘符这样的操作。

要进入任何文件夹 只需要输入cd $PATH就可以了

root@8dc787fe6938:/# cd /var/log/

root@8dc787fe6938:/var/log# pwd

/var/log

③ LS命令

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

3. 相对路径和绝对路径

不管在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文件目录管理

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函数使用方法的总结,大家也可以去查阅官方手册,对函数有更详细的描述。(不用强记,需要的时候去查询即可)

  • 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
  • 返回指定目录下的所有文件和目录名:os.listdir()
  • 函数用来删除一个文件:os.remove()
  • 删除多个目录:os.removedirs(r“c:python”)
  • 检验给出的路径是否是一个文件:os.path.isfile()
  • 检验给出的路径是否是一个目录:os.path.isdir()
  • 判断是否是绝对路径:os.path.isabs()
  • 检验给出的路径是否真地存:os.path.exists()
  • 返回一个路径的目录名和文件名:os.path.split() eg os.path.split(‘/home/swaroop/byte/code/poem.txt’) 结果:(‘/home/swaroop/byte/code’, ‘poem.txt’)
  • 分离扩展名:os.path.splitext()
  • 获取路径名:os.path.dirname()
  • 获取文件名:os.path.basename()
  • 运行shell命令: os.system()
  • 读取和设置环境变量:os.getenv() 与os.putenv()
  • 给出当前平台使用的行终止符:os.linesep Windows使用’rn’,Linux使用’n’而Mac使用’r’
  • 指示你正在使用的平台:os.name 对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
  • 重命名:os.rename(old, new)
  • 创建多级目录:os.makedirs(r“c:pythontest”)
  • 创建单个目录:os.mkdir(“test”)
  • 获取文件属性:os.stat(file)
  • 修改文件权限与时间戳:os.chmod(file)
  • 终止当前进程:os.exit()
  • 获取文件大小:os.path.getsize(filename)
  • 创建空文件: os.mknod(“test.txt”)
  • 创建目录:mkdir(“file”)
  • 复制文件:

① shutil.copyfile(“oldfile”,”newfile”) #oldfile和newfile都只能是文件

② shutil.copy(“oldfile”,”newfile”) #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

  • 复制文件夹:

shutil.copytree(“olddir”,”newdir”) #olddir和newdir都只能是目录,且newdir必须不存在

  • 重命名文件(目录)

os.rename(“oldname”,”newname”) #文件或目录都是使用这条命令

  • 移动文件(目录):shutil.move(“oldpos”,”newpos”)
  • 删除文件:os.remove(“file”)
  • 删除目录

① os.rmdir(“dir”) #只能删除空目录

② shutil.rmtree(“dir”) #空目录、有内容的目录都可以删

  • 转换目录:os.chdir(“path”) #换路径

有了这些基础,我们可以尝试结合python语法来完成一些能在日常工作中大幅提升工作效率的小工具,比如在某个磁盘中搜索所有的图片文件并转存到指定的目录中。

在下一个任务中,我们将学会灵活的使用变量 循环 分支以及自定义函数

...全文
18 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
0人已提交
完成率0%
暂无数据
回复
切换为时间正序
请发表友善的回复…
发表回复

11,076

社区成员

发帖
与我相关
我的任务
社区描述
创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践
python学习 企业社区
社区管理员
  • Python全栈技术社区
  • Lumos_zbj
  • 北侠大卫
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践

  • 这里有最新最全的 Python 学习内容及资源,每月多达4次技术公开课
  • 这里有众多 Python 学习者,陪伴你一起交流成长
  • 这里有专业 Python 社区专家、讲师,帮助你跨越学习瓶颈,解决实操难题
  • 这里有丰富的社区活动,可以开阔眼界,结识更多同伴

【最新活动】:

  1. 周四技术公开课讲师招募中,点击查看详情
  2. “Python 社区专家团” 招募中,点击查看详情

 

试试用AI创作助手写篇文章吧