python学习笔记(五)文件操作

 

目录

(一)路径和路径名

1)绝对路径和相对路径

2)当前工作目录

3)使用pathlib模块访问目录

4)路径名的处理

使用os.path处理路径名

用pathlib处理路径名

(二)获取文件信息

(三)文件系统的其他操作

设计一个计算文件大小的程序

(四)file对象

1)打开和关闭文件

2)使用with关键字

3)读写文本函数

readlines函数

将file对象视为迭代器

写入文件

(五)文件操作的其他模块


文件操作涉及两件事情,即基本的I/O操作和文件系统操作(如文件的命名、创建、移动和引用)。

Python中处理文件路径和文件系统操作的传统方式,是通过os和os.path模块中的函数来完成的。自Python3.5开始,引入了新的pathlib库,可以用更加面向对象、更统一的方式来完成文件操作。

 

(一)路径和路径名

所有的操作系统都会用字符串来引用文件和目录,字符串中包含了给定文件或目录的名称。这种字符串通常被称为“路径名”,有时简称为路径。因为路径名是个字符串,所以在使用时也带来了一定的复杂性。Python做了大量工作,提供了很多函数来避免这种复杂性。

路径名在各种操作系统中的写法都非常相似,因为几乎所有操作系统都把文件系统建模为树状结构,磁盘就是根目录,文件夹、子文件夹就是分支、子分支,依此类推。

对于Windows的路径名大家可能比较熟悉:

C:\Windows\Help\Help

当然,对于不同的操作系统路径名的精确写法还是有差别的。然而Python提供的函数和常量可完成常见的路径名操作,而不必关心这些语法上的细节。只要稍加小心,就可以不管底层文件系统是什么,都能编写出正常运行的Python程序。

1)绝对路径和相对路径

操作系统支持以下两种路径表示法:

  • 绝对路径指明了文件在整个文件系统中的确切位置,不会有什么歧义。绝对路径将给出文件的完整路径,从文件系统的根目录开始。
  • 相对路径指明了文件相对于文件系统某点的位置,该相对点并不是由相对路径本身给出的。相对路径起始点的绝对位置,是由调用时的上下文给出的。

相对路径需要根据上下文来确定实际的位置,上下文一般由两种方式来给出。

  • 相对简单的方式是在已有的绝对路径上添加相对路径,以生成一个新的绝对路径;
  • 相对路径获得上下文的第二种方式,是通过对当前工作目录的隐式引用。当前工作目录是指,在运行Python程序的任意时刻,程序记录的当前所在目录。例如,os.listdir(path)命令用了相对路径作为参数,则该相对路径就以当前工作目录作为锚点(anchor),结果中文件名所在目录的路径就是当前工作目录加上参数指定的相对路径。

2)当前工作目录

每当在计算机上编辑文档时,都会有一个位置概念,即文档在计算机文件结构中所处的当前位置。类似地,每当Python运行时,也有一个当前位置地概念,即某时刻所处地目录结构。这一点很重要,因为程序可能需要获取当前目录中的文件列表。Python程序所在的目录被称为该程序的当前工作目录,当前工作目录可能与存放该程序的目录不同。

可以使用os.getcwd()命令(获取当前工作目录)查看Python初始状态下的当前工作目录:

>>> import os
>>> os.getcwd()
'D:\\python37'

以上是在windows上面的。注意调用函数os.getcwd()时是不带参数的,以强调返回值不是固定不变的。如果执行了修改当前工作目录的命令,其返回结果就会发生变化。当前工作目录可能是存放Python程序的目录,也可能是启动Python时所在的目录。在Linux系统上,返回结果会是/home/myuser,也就是当前用户的主目录(home)。

在windows上,路径中会有额外的反斜杠插入,因为Windows系统用“/”作为路径分隔符。

下面输入:

>>> os.listdir(os.curdir)
['as.py', 'assert.py', 'circle.py', 'circle__cm.py', 'conclusion.py', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'pymysql', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'qwes.py', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll', '__pycache__', '列表.py']

属性os.curdir返回的是系统用来表示当前目录的字符串。该字符串是个相对路径,也就是说os.listdir会将其加到当前工作目录的路径之后,路径其实没有发生变化。上述命令将会返回当前工作目录中所有文件/文件夹的列表。任选择一个文件夹名称,键入以下命令:

>>> os.chdir('Lib')     #修改当前目录
>>> os.getcwd()
'D:\\python37\\Lib'

由上可见,Python会移入os.chdir函数参数指定的文件夹中。这时再次调用os.listdir(os.curdir),将会返回folder文件夹中的文件列表,因为os.curdir将相对新的当前工作目录而言。Python中有很多文件操作系统,都是以这种方式使用当前工作目录的。

 

3)使用pathlib模块访问目录

用pathlib获取当前目录的步骤如下:

>>> import pathlib
>>> cur_path = pathlib.Path()
>>> cur_path.cwd()
WindowsPath('D:/python37')

pathlib不提供像os.chdir()那样改变当前工作目录的函数,但可以通过创建path对象来新建文件夹。

 

4)路径名的处理

 

使用os.path处理路径名

Python提供了处理路径名的功能,这些功能由os.path子模块中的一些函数和常量构成,利用这些功能处理路径名时,就无须显式采用任何与操作系统相关的语法了。路径名仍然用字符串来表示,但不用当作字符串来处理了。

可用os.path.join函数在各种操作系统中构建一些路径名:

>>> import os
>>> print(os.path.join('bin','utils','disktools'))
bin\utils\disktools

os.path.join()函数将参数解释为一系列的目录名或文件名,这些路径将被拼接起来形成单个字符串,底层操作系统将该字符串理解为相对路径。

注意,os.path.join()函数可以由一系列目录或文件名生成文件路径,并且不必关心底层操作系统的语法规则。上面代码是在Windows系统中运行的,结果返回的是反斜杠连接的路径名。同样在Linux/UNIX系统中,会采用正斜杠作为路径名。如果想让构建文件路径的方式不受未来运行环境的限制,那么采用os.path.join就是基本的方式。

os.path.join的参数不一定非得是单个目录或文件名,也可以是子路径,连起来可以形成更长的路径名。以下例子演示了在Windows环境中的这种用法,并且这时必须在字符串中使用双反斜杠。注意,这时用正斜杠(/)输入路径名也是可以的,因为Python在与Windows操作系统交互之前会进行转换:

>>> import os
>>> print(os.path.join('mydir\\bin', 'utils\\disktools\\chkdisk'))
mydir\bin\utils\disktools\chkdisk

当然,如果始终用os.path.join来建立路径,就几乎不必操心上述问题。可以写成可移植的形式:

>>> path1 = os.path.join('mydir', 'bin')
>>> path2 = os.path
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值