Python 文件与路径操作
Posted 许硕的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 文件与路径操作相关的知识,希望对你有一定的参考价值。
路径表示
绝对路径:
绝对路径是指从盘符开始的文件全路径,一般表现为“/”。
如“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 文档)但本文主要选取
os
和os.path
进行介绍(os.path官方文档:os.path --- 常用路径操作 — Python 3.11.2 文档)
-
os.system
与os.popen
:
可以使用os.system
执行系统级的Shell指令,它的返回值只有0或1,对应指令执行失败或成功。可以用它搭配相应的系统命令操作文件及路径。
os.popen
和os.system
类似,但会新开一个管道执行命令,并返回对应指令的返回值。 -
os.path.exists
与os.path.lexists
:
os.path.exists
和os.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.makedirs
比os.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
:
输入路径,递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
Python当前文件路径与文件夹删除操作
前言:
Python的文件操作跟Java存在部分差异。由于项目需要,近期使用python进行模块开发时遇到一些常见的文件操作便上网搜罗了一番,感觉众说纷纭。因此,结合自身的使用场景,贴一段python代码供后续查阅。
准备一个测试文件 “c://test/a.txt”。
# encoding:utf-8 import os import shutil if __name__ == ‘__main__‘: print "current workspace directory ------------>" print os.path print os.getcwd() print os.getcwdu() print print "file(s) operation ------------>" path1 = "c:/test/a.txt" path2 = "c:/test" print os.path.exists(path1) print os.path.exists(path2) # os.removedirs(r"c://test") # 只能删除空文件夹 shutil.rmtree(path2) print os.path.exists(path1) print os.path.exists(path2)
控制台输出如下:
current workspace directory ------------>
<module ‘ntpath‘ from ‘E:\\Python27\\lib\\ntpath.pyc‘>
D:\\PyCharm\\cjkj-cloud-pyspark-ml
D:\\PyCharm\\cjkj-cloud-pyspark-ml
file(s) operation ------------>
True
True
False
False
以上是关于Python 文件与路径操作的主要内容,如果未能解决你的问题,请参考以下文章