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 文档

但本文主要选取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

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

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 文件与路径操作的主要内容,如果未能解决你的问题,请参考以下文章

文件操作,路径操作,StringIO和BytesIO,序列化反序列化,正则表达式与python中使用

Python Linux系统管理之文件与文件路径管理

Python文件读写操作

Python文件操作与集合

#yyds干货盘点#python使用技巧之文件与路径管理

Python之文件路径名的操作