Python 操作文件时,我们一般要先判断指定的文件或目录是否存在,不然容易产生异常。
os模块提供了一种使用与操作系统相关的功能。os.path 模块操作文件路径。【其官方文档,可见如下两部分
os --- 多种操作系统接口 — Python 3.10.3 文档
例子Python OS 文件/目录方法 | 菜鸟教程
os.path --- 常用路径操作 — Python 3.10.3 文档
例子Python os.path() 模块 | 菜鸟教程 】要使用os标准模块,用import os语句引入之。
shutil 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。【其官方文档shutil --- 高阶文件操作 — Python 3.10.3 文档 】要使用shutil 模块先用import shutil引入
fileinput模块(module)实现了一个辅助类和一些函数用来快速编写访问标准输入或文件列表的循环。【其官方文档fileinput --- 迭代来自多个输入流的行 — Python 3.10.3 文档 】要使用fileinput 模块先用import fileinput引入
tempfile模块用于创建临时文件和目录【其官方文档tempfile --- 生成临时文件和目录 — Python 3.10.3 文档
】要使用tempfile 模块先用import tempfile引入。
这些都是Python自带的标准模块, Python 安装时同时就附带自动安装了,不需象使用第三方模块那样,需要先用pip程序单独安装之,才可以用。
用import os语句后,可以使用下列函数
os.name # nt 表示Windows 系统;'posix’表示Linux系统
os.sep #输出当前操作系统的路径分隔符;windos 展示 “\” 或 “\”;linux ”/“
os.linesep #输出当前操作系统的换行符
os.pathsep #输出分割文件路径的分隔符
os.environ #获取系统环境变量
os.listdir(path) # 列出该路径下所有的文件夹
os.mkdir(path) #创建一个目录
os.rmkdir(path) #删除一个空目录
os.rename(‘src’,‘dst’) # 更改文件或目录名,将src 重命名为 dst
os.getcwd() # 获取当前的工作目录
os.chdir(path) # 改变当前脚本目录,到指定目录
os.open() # 读写一个文件,其官方文档 https://docs.python.org/zh-cn/3/library/functions.html#open
os.path.exists(path) #如果path存在则返回true,否则返回false
os.path.isabs(path) #如果path是绝对路径则返回true
os.path.isfile(path) #如果path是一个存在的文件返回true,否则返回false
os.path.isdir(path) #如果path是一个存在的目录则返回true,否则返回false
os.path.split(path) #将path分割成目录和文件名二元组返回
os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组
例1、判断文件是否存在
import os
file="d:/hello.txt"
os.path.exists(file) #存在返回True
例2、分割路径,返回路径名和文件扩展名
一个文件的文件名为:
file='abc123.txt'
则:
os.path.splitext(file)[0] #得到:'abc123'
os.path.splitext(file)[1] #得到:'.txt'
用import shutil 语句后,可以使用下列函数
shutil.rmtree(path) # 删除一个完整的目录树——文件夹及其下所有文件
shutil.copyfile("old","new") # 复制文件,只能是文件
shutil.copytree("old","new") # 复制目录,只能是目录,且new必须不存在
shutil.copy("old","new") # 复制文件/文件夹,复制 old 为 new
shutil.move("old","new") # 移动文件/文件夹至 new 文件夹中
用import fileinput 语句后,可以使用下列函数
input() #模块的主要方法,返回能够用于for循环遍历的对象,该对象可迭代
fileinput.filename() #返回当前正在读取的文件名,如果第一行被读取之前调用将返回None
fileinput.fileno() #返回当前文件的文件描述符(1个整数),没有文件被打开(第一行之前或文件之间的时刻)将返回-1
fileinput.lineno() #返回当前已经累加读取的行的数量(或者序号)
fileinput.filelineno() #返回当前读取的行的行号,第一行读取之前返回0,最后文件的最后行被读取之后调用,将返回最后一行所在文件的行号
fileinput.isfirstline() #检查当前行是否是所在文件的第一行,如果是则返回True,否则False
fileinput.isstdin() #如果上一行是从sys.stdin(标准输入)读取的,则返回True,否则False
fileinput.nextfile() #关掉当前文件以便从下个文件的第一行开始迭代读取
例、判断是否是第一行:
import fileinput
for line in fileinput.input(r'd:\test.txt'):
if fileinput.isfirstline():
print(line)
else:
break
fileinput.close()
用import tempfile 语句后,可以使用下列函数
tempfile.TemporaryFile()
tempfile.NamedTemporaryFile()
tempfile.SpooledTemporaryFile()
tempfile.TemporaryDirectory)_
tempfile.mkstemp()
tempfile.mkdtemp()
大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存
临时文件不用命名,且使用后会被自动删除
例1、使用 TemporaryFile 创建的临时文件没有文件名,在文件系统中找不到,只能被当前进程访问
import tempfile
f = tempfile.TemporaryFile()
f.write(b'test')
f.seek(0)
print(f1.read())
例2、使用 NamedTemporaryFile 创建的临时文件有文件名,在文件系统中可以找到,因此可以多个进程同时访问
import tempfile
f = tempfile.NamedTemporaryFile()
f.write(b'test')
print(f.name)
f.seek(0)
print(f2.read())