Python 文件与路径操作

发布时间 2023-04-02 17:59:03作者: XuShuo_Self

路径表示

绝对路径:

绝对路径是指从盘符开始的文件全路径,一般表现为“/”。
如“C:/Users/TheUser/Desktop/temp.txt”(Windows)、
“/Users/TheUser/Desktop/temp.txt”(Windows)、
“/home/TheUser/temp.txt”(Linux)。

相对路径:

相对路径是指从本文件开始算起的文件路径,总体长度相较绝对路径一般要短,一般表现为“./”或“../”
——其中,“./”表示当前路径,“../”表示上级路径。
如当前文件是“C:/Users/TheUser/Desktop/demo.py”,
“./a.jpg”就表示“C:/Users/TheUser/Desktop/a.jpg”,
“./img/b.png”就表示“C:/Users/TheUser/Desktop/img/b.png”,
“../c.txt”就表示“C:/Users/TheUser/c.txt”
“../../d.log”就表示“C:/Users/d.log”

r字符串(r-String)

用一般的字符串表示路径,尤其是Windows文件路径,可能会出现解释器将路径的一部分判定为转义字符的现象。

但如果使用r字符串,如r'C:\Users\TheUser',那么r字符串就会自动忽略字符串中的转义字符,所以r字符串常用于表示路径。

open函数

open函数用于打开一个文件并返回一个文件对象,其是Python内建函数,也是Python 文件I/O操作的重要一环。

open函数的三个常用参数:open(file_name, mode='r', encoding='utf-8')

  • file_name参数为必选参数,其应当传入一个相对文件路径或绝对文件路径(字符串类型)。
  • mode为可选参数,其应当传入一个文件操作类型(字符串类型)如不指定,默认为r(只读)模式。参数参考表如下;
# r系列:读
# 其中二进制常用于媒体文件等非文本文件

'r' : 只读  要求文件必须存在、如文件不存在则报错  文件指针位于开头
'rb' : 二进制只读  要求文件必须存在、如文件不存在则报错  文件指针位于开头
'r+' : 读写  要求文件必须存在、如文件不存在则报错  文件指针位于开头
'rb+' : 二进制读写  要求文件必须存在、如文件不存在则报错  文件指针位于开头
# w系列:写
# 其中二进制常用于媒体文件等非文本文件

'w' : 只写  如文件存在即清除原内容写、如文件不存在则新建文件  文件指针位于开头
'wb' : 二进制只写  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于开头
'w+' : 读写  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于开头
'wb+' : 二进制读写  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于开头
# a系列:追
# 其中二进制常用于媒体文件等非文本文件

'a' : 追加  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于末尾
'ab' : 二进制追加  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于末尾
'a+' : 读写  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于末尾
'ab+' : 二进制读写  如文件存在即清除原内容写、如文件不存在则新建文件 文件指针位于末尾
  • encoding为可选参数,其用来指示文件操作编码(字符串类型),如不指定,一般默认为cp936。

    如果出现此异常:'gbk' codec can't decode...,那么将参数带上encoding='utf-8'就行了(此异常一般是以GBK编码打开了GBK无法处理的字符,如UTF-8字符)。

with as

with as 封装了异常判断程序,可以自动对文件执行关闭操作,如下所示的两段代码的效果就是完全相同的。

f = open('./tmp.txt', 'w')

try:  
    f.write('something...')
finally:  
    f.close()
with open('./tmp.txt', 'w') as f:  
    f.write('something...')

文件对象

f = open('./tmp.txt', encoding='utf-8') # 创建文件对象,并赋值到变量f

f.closed # 文件对象的关闭状态,已关闭返回True,未关闭返回False

f.name # 文件对象的路径和名称

f.encoding # 文件对象的编码

f.mode # 文件对象的操作模式

f.read() # 从文件指针处开始读取文章,返回一个字符串,字符串是全文内容
f.readline() # 从文件指针处开始读取文章,返回一个字符串,字符串是当行内容
f.readlines() # 从文件指针处开始读取文章,返回一个列表
# 列表里每个元素都是字符串,分别是每行的内容

f.write(str) # 写入字符串str
f.writelines(iter) # 写入可迭代对象iter
# 其可以是字符串、元组、列表、字典(字典会选取键写入)等

f.seek() # 设置文件指针位置,f.seek(0,0)表示将指针移至开头

f.close() # 关闭文件

相关模块

可以操作文件与路径的模块有很多,如pathlib(pathlib官方文档:pathlib --- 面向对象的文件系统路径 — Python 3.11.2 文档

但本文主要选取osos.path进行介绍(os.path官方文档:os.path --- 常用路径操作 — Python 3.11.2 文档

  • os.systemos.popen
    可以使用os.system执行系统级的Shell指令,它的返回值只有0或1,对应指令执行失败或成功。可以用它搭配相应的系统命令操作文件及路径。

    os.popenos.system类似,但会新开一个管道执行命令,并返回对应指令的返回值。

  • os.path.existsos.path.lexists

    os.path.existsos.path.lexists效果几乎一样,它们的主要必填参数都只有一个path,作用都是检查文件是否存在,返回值为True或False。
    使用如 os.path.exists('C:\Users\TheUser\Desktop\tmp.txt')
    而它们的区别是如果要检测的对象是个已失效的链接,os.path.exists会返回False,而os.path.lexists仍会返回True。

  • os.path.isfile

    输入一个文件路径,查看其是否是文件。如果是则返回True,如果否则返回False。

  • os.path.isdir

    输入一个目录路径,查看其是否是路径。如果是则返回True,如果否则返回False。

  • os.mkdir

    它的常用用法:os.mkdir(path),其中path为想要添加的文件夹路径。

    如:os.mkdir('C:/Users/TheUser/Desktop/fd')就是在用户名为TheUser的桌面上创建一个fd文件夹。

    它只能创建单层目录,如果需要创建多层目录的话则需要os.makedirs,否则它将会报错。

    注意:如果创建目录之前指定路径已经有对应文件夹了,那么其会触发异常。

  • os.makedirs

    它的常用用法:os.makedirs(path),其中path为想要添加的文件夹路径,与os.mkdir不同的是,os.makedirs可以通过递归新建文件夹。

    os.makedirsos.mkdir的功能更丰富,它可以同时创建单层目录或多层目录,而os.mkdir只能创建单层目录。

    注意:和os.mkdir类似,如果创建目录之前指定路径已经有对应文件夹了,那么其会触发异常。

  • os.rename
    它的用法是os.rename(old,new),其可以将文件old重命名为new,用法如os.renames('txt1.txt', 'txt2.txt')

  • os.renames
    其用法和os.rename类似,os.renames(old,new),可以递归修改文件名,用法如os.renames('txt1.txt', 'd/txt2.txt')

  • os.remove

    输入指定文件路径,删除某文件。

    注意:如果输入的路径是文件夹路径,那么其会报错。

  • os.rmdir

    输入路径,删除此路径的单层目录,如果该层目录非空则抛出异常。

  • os.removedirs

    输入路径,递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。