python 文件和目录相关操作
文件夹和文件路径
绝对路径: 是从根目录开始描述的路径。
相对路径:相对于当前目录
.
一个点,表示的是当前文件夹;..
两个点表示的是上一层文件夹。
os模块
在 Python 中操作文件路径,使用 os 模块,os.path 模块是 os 模块内部的一个子模块,首先导入该模块。
import os
通过os模块提供的通用变量可以获取与系统有关的信息。常用的变量有:
name
:用于获取操作系统的类型。
linesep
:用于获取当前操作系统上的换行符。
sep
:用于获取当前操作系统所使用的路径分隔符。
os模块提供的一些操作目录的函数
getcwd()
返回当前的工作目录
import os
print(os.getcwd())
chdir(path)
把path设置为当前工作目录
目录/文件操作:
mkdir(path [,mode])
创建目录
os.mkdir(path, mode=0o777) # mode:用于指定数值模式,默认值为0o777。
-
makedirs(path1/path2…[,mode])
创建多级目录 -
rmdir(path)
删除目录,只有当要删除目录为空时才起作用。 -
removedirs(path1/path2……)
删除多级目录 -
os.walk(top[, topdown][, onerror][, followlinks])
遍历目录树''' top:指定要遍历内容的根目录。 topdown:可选参数,用于指定遍历的顺序。若值为True,表示自上而下遍历(先遍历根目录),若值为 False,表示自下而上遍历。(默认值为True) onerror:可选参数,用于指定错误处理方式,默认忽略,使用时指定一个错误处理函数即可。 followlinks:可选参数,默认情况下将参数值设为True。 返回值:返回三个元素(dirpath, dirnames, filenames) dirpath: 字符串; dirnames: 列表 ; filenames: 列表 '''
import os # 导入os模块 path = "C:\\demo" # 指定要遍历的根目录 print("【",path,"】 目录下包括的文件和目录:") for root, dirs, files in os.walk(path, topdown=True): # 遍历指定目录 for name in dirs: # 循环输出遍历到的子目录 print(">",os.path.join(root, name)) for name in files: # 循环输出遍历到的文件 print("<",os.path.join(root, name))
-
remove(path)
删除文件import os path = "a.txt" #目标文件 if os.path.exists(path): #判断文件是否存在 os.remove(path) #存在即删除 print("删除完毕")
-
rename(src,dst)
重命名文件和目录 -
stat(path)
获取文件信息''' stat()函数返回值是一个对象。 st_mode: 保护模式 st_ino: 索引号 st_dev: 设备名 st_nlink: 硬链接号(被连接数目) st_uid: 用户ID st_gid: 组ID st_size: 普通文件以字节为单位的大小 st_atime: 最后一次访问时间 st_mtime: 最后一次修改时间 st_ctime: 最后一次状态变化时间。系统不同,返回结果也不同。例如,Windows下返回的是文件的创建时间。 '''
获取目录下的内容:
-
listdir(path)
返回指定路径下的文件和目录信息import os print(os.listdir("."))
os.path模块
os.path模块提供的一些操作目录的函数
获取路径:
-
abspath(path)
用于获取文件或目录的绝对路径import os ret = os.path.abspath("demo4.py") print(ret)
-
relpath(path,start)
用于获取相对于start的路径,start默认是当前路径import os ret = os.path.relpath("D:\\") print(ret)
检查路径
exists(path)
如果 path 文件或文件夹存在返回 True,否则返回 False;isabs(path) path
是绝对路径返回 True,否则返回 False;isdir(path) path
是文件夹返回 True,否则返回 False;isfile(path) path
是文件返回 True,返回 False;
路径的拼接和分割
join(path,name)
将目录与目录或者文件名拼接起来splitext()
分离文件名和扩展名basename(path)
从一个目录中提取文件名dirname(path)
从一个路径中提取文件路径,不包括文件名
文件读写
创建和打开文件
创建或打开指定文件并创建文件对象可以使用open()
方法,基本语法如下
'''
file :被创建的文本对象
filename:要创建或打开文件的名称,需要使用单引号或双引号括起来。如果要打开文件和当前文件在同一目录下,那么直接写文件名即可,否则则需要指定完整路径。
mode:可选参数,用于指定文件的打开模式。参数表如下。
'''
file = open(filename[,mode[,buffering]])
file = open('message.txt','w',encoding="utf-8")
- buffering:可选参数,用于指定读写文件的缓冲模式,如果值为0,则表示不缓存;如果值为1,则表示缓存;如果值大于1,则表示缓冲区的大小,默认为缓冲模式。
- mode 的参数值:
r
以只读模式打开文件。文件的指针将会放在文件的开头rb
以二进制格式打开文件,并且采用只读模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等r+
打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖)rb+
以二进制格式打开文件,并且采用读写模式。文件的指针将会放在文件的开头。一般用于非文本文件,如图片、声音等w
以只写模式打开文件wb
以二进制格式打开文件,并且采用只写模式。一般用于非文本文件,如图片、声音等w+
打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限wb+
以二进制格式打开文件,并且采用读写模式。一般用于非文本文件,如图片、声音等a
以追加模式打开一个文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入ab
以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入a+
以读写模式打开文件。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写ab+
以二进制格式打开文件,并且采用追加模式。如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写
关闭文件
打开文件后要及时关闭,以免造成对文件不必要的破坏,关闭文件时可以使用文件对象的close()
方法实现。
读取文件
-
read()
: 读取文件所有内容# 文件地址,注意提前在当前目录新建一个 test.txt 文件 file = "test.txt" # 打开文件 f = open(file, encoding="utf-8") # 读取文件全部内容 read_str = f.read() # 关闭文件 f.close() print(read_str)
-
for 循环
逐行读取文件内容# 文件名 file = "test.txt" # 打开文件 f = open(file, encoding="utf-8") # 循环逐行读取 for line in f: print(line,end="") # 在 txt 文件中,每行的末尾默认有一个换行,print 函数输出也会带一个换行,所以出现 2 个回车符,解决办法,可以使用 print 函数的第二个参数。 # 关闭文件 f.close()
-
readline()
方法,从文中读取整行信息with open('message.txt','r') as file: # 打开文件 number = 0 # 记录行号 while True: number += 1 line = file.readline() if line =='': break # 跳出循环 print(number,line,end= "\n") # 输出一行内容
-
readlines()
将数据一次性读取到一个列表中# 文件名 file = "test.txt" # 打开文件 f = open(file, encoding="utf-8") # 逐行读取 data = f.readlines() # 关闭文件 f.close() print(data) # ['line 1\n', 'line 2\n', 'line 3\n', 'line 4']
with语句
打开文件后要及时关闭,如果忘记关闭,可能带来意想不到的问题。另外,如果在文件打开时出现了异常,将导致文件不能关闭。为了更好避免这些问题,可以使用with语句,从而在文件处理时,无论是否出现异常都能保证with语句执行完毕后关闭已打开的文件。
'''
expression: 用于指定一个表达式,可以是打开文件的open()函数。
target:用于指定一个变量,并且将expression的结果保存到该变量中。
with-body:用于指定with语句体,其中可以是执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接使用pass语句代替。
'''
with expression as target:
with-body
file = "test.txt"
# 打开文件
with open(file,encoding="utf-8") as f:
# 读取文件全部内容
read_str = f.read()
print(read_str)
异常捕获
读写文件的时候,经常会出现一些 IOError 错误异常,建议写在 try…finally… 异常捕获块中,养成良好的编码习惯。
try:
# 打开 hello.txt 文件,指定「只读模式」
hello = open('helo.txt', 'r')
# 使用 readlines(),读取全部信息
con = hello.readlines()
print(con)
finally:
print('出问题了')
# 最后需要将文件关闭
hello.close()
写入文件
-
使用
write()
方法进行文件写入操作''' file:打开的文件对象。 string:要写入的字符串。 ''' file.write(string)
通过
write
方法可以写入单行数据,如果想要写入多行数据,可以在 with 代码块中,写上多个write
方法即可。注意write
方法默认在行尾不添加换行符,如果希望加上换行符,需手动添加。file = "test.txt" # 打开文件 with open(file, mode="w", encoding="utf-8") as f: # 写入文件内容 f.write("我是即将被写入的内容\n") f.write("我是即将被写入的内容")
-
使用
writelines()
方法写入多行数据# 创建一个列表 txtlist = ['line 1\n', 'line 2\n', 'line 3\n'] # 写入文件 with open('hello.txt') as hello : hello.writelines(txtlist)