热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3学习笔记:目录&文件处理

路径路径,用于定位目录或文件的字符串。相对路径相对路径依赖于当前工作目录(即当前文件所在的目录),可以使用如下函数获取当前工作目录,1os.ge

路径

路径,用于定位目录或文件的字符串。

相对路径

相对路径依赖于当前工作目录(即当前文件所在的目录),可以使用如下函数获取当前工作目录,

1
os.getcwd()
复制
在当前工作目录中,可以使用相对路径访问这个目录中的所有子目录和其中的文件,而无需使用完整路径。

绝对路径

指一个目录或文件的实际路径,如 D:\Code\Python-Study-Notes\exercise\try_except_demo.py,这就是一个绝对路径,无论当前在哪个目录中,只要使用这个路径,就会访问 try_except_demo.py 文件。

可以使用如下函数获取目录或文件的绝对路径,

1
os.path.abspath(path)
复制
其中,参数 path 是一个相对路径,可以是目录,也可以是文件。

路径处理

判断指定的目录或文件是否存在
1
os.path.exists(path)
复制
存在则返回 True,反之则返回 False。

拼接目录与目录或文件的名字
1
os.path.join(path, name)
复制
分离文件名和其扩展名
1
os.path.splitext(fileName)
复制
从一个路径中提取最后的目录名或文件名
1
os.path.basename(path)
复制
从一个路径中提取最后一个目录或文件所在的目录
1
os.path.dirname(path)
复制
判断是否为有效路径
1
os.path.isdir(path)
复制
目录基本操作

目录,即文件夹,可以存放目录及文件。

获取当前系统类型
1
os.name
复制
其中,nt 表示 Windows;posix 表示 Linux 或 Unix 或 MacOS。

获取当前系统的换行符
1
os.linesep
复制
获取当前系统的路径分隔符
1
os.sep
复制
获取当前的工作目录的路径
1
os.getcwd()
复制
已列表的形式返回指定路径下的目录和文件
1
os.listdir(path)
复制
在指定路径下新建一个目录
1
os.mkdir(path, mode)
复制
path 为路径,mode 表示目录的权限(在非 Unix 系统上无效)。

在指定路径下创建多级目录
1
os.makedirs(path, mode)
复制
创建多级目录,即创建它本身及它的子目录和子目录的子目录,mode 表示目录的权限(在非 Unix 系统上无效)。

删除文件
1
os.remove(path)
复制
或者,

1
os.unlink(path)
复制
该函数可以删除指定路径下的文件。

删除一个非空的目录
1
os.rmdir(path)
复制
使用 rmdir() 删除一个目录时,该目录下不能有任何子目录和文件。

删除多级空目录
1
os.removedirs(path)
复制
删除它本身及其中的子目录和子目录中的子目录,但是这些目录中不能有任何文件,即这些目录必须是空的。

把 path 设置为当前的工作目录
1
os.chdir(path)
复制
遍历指定路径下的所有目录和文件
1
os.walk(path, topdown=True, onerror, followlinks=False)
复制
该函数只在 Unix 和 Windows 系统中有效。

path 表示要遍历的目录;topdown 如果为 True 则自上而下遍历,反之则自下而上;onerror 用于指定错误处理函数;followlinks 用于指定在支持的系统上访问由符号链接指向的目录。

该函数返回一个元组生成器对象,其中包含三个元素:当前遍历的路径,是一个字符串;该路径下包含的目录,是一个列表;当前路径下包含的文件,是一个列表。示例如下:

1
2
3
4
5
6
7
8
9
import os

root = r"D:\Code\YunYiCangQiong\00 原文稿"

for path, dirs, files in os.walk(root,followlinks=True):
for name in dirs:
print("○", os.path.join(root, name))
for name in files:
print("●", os.path.join(root, name))
复制
列出目录下的所有内容(子目录和文件)
1
os.listdir(path)
复制
该函数会列出指定路径的目录下所有内容,包含子目录、文件、隐藏文件等。

文件基本操作

在 Python 中,内置了文件(File)对象,在操作文件之间,需要使用 open() 函数打开或创建一个文件,

1
file = open(fileName, mode, buffering)
复制
file 表示被创建的文件对象;fileName 表示要打开或创建的文件名;mode 表示文件的打开模式;buffering 表示读写文件的缓存模式。

其中,mode 的参数如下:

Python 3 学习笔记:目录&文件处理

打开文件并对其操作完毕后,要及时关闭该文件,以免造成不必要的损坏。可以使用 close() 函数将文件关闭,

1
file.close()
复制
为了避免忘记关闭文件而对文件造成不必要的损坏,可以使用 with 关键字,该语句可以实现在处理文件时,无论是否出现错误,都保证 with 语句结束后关闭文件。

1
2
with expression as target:
pass
复制
expression 是一个表达式,例如使用 open() 函数打开一个文件;target 用于存放 expression 的结果。

当需要向打开的文件中写入内容时,可以使用 write() 函数,

1
file.write()
复制
当使用 write() 函数向文件中写入内容后,只有在使用 close() 函数关闭文件时,才会将写入的内容保存;如果不想立即关闭文件,可以使用 flush() 函数保存写入的内容,

1
file.flush()
复制
如果要读取文件的内容,可以使用 read() 函数,

1
file.read(size)
复制
size 表示要读取的字符的个数,省略则表示读取全部字符。

read() 函数是从头开始读的,如果想要从指定位置开始,则可以使用 seek() 函数移动光标到指定位置,

1
file.seek(offset, whence)
复制
其中,offset 表示光标移动的字符个数;whence 指定字符个数从哪个位置开始计算:0 表示从头开始;1 表示从当前位置开始;2 表示从结尾开始,默认为 0。

可以使用 readline() 函数一行行读取,

1
file.readline()
复制
也可以使用 readlines() 函数读取全部行,

1
file.readlines()
复制
该函数返回一个字符串列表,每个元素为文件的一行内容。

高级操作

shutil 模块

shutil 模块可以复制、移动、重命名和删除目录或文件。

1
shutil.copy(source, destination)
复制
该函数可以将 source 路径下的文件,复制到 destination 路径的目录下,如果目标目录中已存在同名文件,则直接替换;如果 destination 路径中包含文件名,则将被复制的文件重命名为此名称。

如果想要将目录及其中的子目录和文件,全部复制到一个新的目录中,可以使用

1
shutil.copytree(source, destination)
复制
注意,destination 路径下不能包含和 source 路径中目标文件夹的同名目录,否则系统会抛出异常。

如果需要移动目录(包括其中的子目录和文件)或文件,可以使用

1
shutil.move(source, destination)
复制
如果目标文件夹中已经包含同名目录或者文件,则会抛出异常。

os 模块中的 rmdir() 和 removedirs() 都只能删除一个非空的目录,如果想删除一个目录及其中的子目录和文件,可以使用,

1
shutil.rmtree(path)
复制
该函数可以删除指定的目录及其中所有内容(子目录及文件)。

send2trash 模块

使用 shutil 模块中的函数删除目录即文件是不可恢复的,为了保险起见,可以使用第三方库 send2trash 中的函数做删除动作,它不会完全删除目录或文件,而是将它们放入回收站中,以供反悔。因为它是一个第三方模块,所以使用之前需要使用 pip 工具安装它,并使用 import 语句导入。

1
send2trash.send2trash(path)
复制
zipfile 模块

读取 .zip 文件

该模块可以将多个目录或文件做成一个 ZIP 压缩包,当然也可以解压压缩包。

和 File 文件对象一样,要读取 ZIP 文件的内容,首先需要创建一个 ZipFile 对象,

1
zipfile.ZipFile(path)
复制
该函数返回一个 ZipFile 对象;path 表示一个 .zip 格式的压缩包。

然后,可以使用 namelist() 函数获取压缩包中的文件列表,

1
ZipFile.namelist()
复制
该函数返回一个以压缩包中的文件名作为元素的列表。

可以使用 getinfo() 函数获取文件列表中文件的信息,

1
ZipFile.getinfo(ZipFile.namelist()[index])
复制
该函数需要一个压缩包中的文件作为参数,返回一个 ZipInfo 对象,该对象具有许多可以获取文件信息的属性,如 filename、date_time、file_size 等。

解压 .zip 文件

通过 ZipFile 对象的 extractall() 方法可以对压缩包进行解压,

1
ZipFile.extractall(path)
复制
path 可选参数,用于指定解压后的存放路径;如果不指定,则解压中当前路径下。

创建 .zip 压缩包

创建压缩包,首先需要使用 ZipFile() 方法新建一个空的压缩包,然后使用 write() 方法将文件添加到压缩包中,

1
zipfile.ZipFile(name, mode).write(fileName, compress_type=zipfile.ZIP_DEFLATED)
复制
name 用于指定压缩包的名称;mode 用于指定压缩包的打开模式;fileName 用于指定要放入压缩包中的文件;compress_type 用于指定压缩算法,一般都是 ZIP_DEFLATED,该算法都大部分类型的文件都有效。

其中,mode 的值可以参考文件基本操作中的值。


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
author-avatar
精神还没分裂2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有