- 文件 *** 作
- 读写 *** 作系列
- os.open打开文件
- os.close关闭文件
- os.read读取
- os.write(fd, str)
- 路径系列
- os.getcwd()
- os.listdir()
- os.pardir
- Python os.chdir()
- os.path模块
- os.path.abspath(path)
- os.path.basename(path)
- os.path.dirname(path)
- os.path.exists(path)
- os.path.getsize(path)
- os.path.isabs(path)
- os.path.isfile(path)
- os.path.isdir(path)
- os.path.join(path1[, path2[, ...]])
- os.path.split(path)
- os.path.splitext(file)
- 文件或文件夹重命名
- os.rename文件或文件夹重命名
- os.renames(old, new)
- 创建目录
- os.mkdir(文件夹/文件名字)
- os.makedirs(path[, mode])
- 删除系列
- os.rmdir(文件夹路径)
- os.removedirs(文件夹路径)
- os.remove(文件路径)
- 应用举例
- os 模块提供了非常丰富的方法用来处理文件和目录。
- os.open(file, flags[, mode]); flag用于选择是以什么模式打开,读写等。
- 如os.O_RDWR 以读写的方式打开, os.O_CREAT: 创建并打开一个新文件。
import os
file = r"..\sample\s1.txt"
fp_wr = os.open(file, os.O_RDWR | os.O_CREAT)
os.write(fp_wr, "I am well".encode("utf-8"))
os.close(fp_wr)
fp_rd = os.open(file, os.O_RDONLY)
msg = os.read(fp_rd, 100)
print(msg)
os.close(fp_rd)
result:
b'I am well'
os.close关闭文件
- os.close( fd )
- os.read(fd, n),从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
- os.write(fd, str),写入字符串到文件描述符 fd中. 返回实际写入的字符串长度。
- os.getcwd()方法用于返回当前工作目录,是个绝对路径字符串。
- os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
- 它不包括 . 和 … 即使它在文件夹中,只列出一层。
# path: 需要列出的目录路径
os.listdir(path)
os.pardir
- 获取当前目录的父目录(上一级目录),以字符串形式显示目录名。
import os
print(os.getcwd())
result = os.pardir
print(os.path.abspath(result))
result:
F:\study\python\qt_study\qt_project\test
F:\study\python\qt_study\qt_project
Python os.chdir()
- 改变当前工作目录到指定的路径,路径不存在时报错。
import os
dir_path = r"F:\study\python\qt_study\qt_project\sample"
curr_path = os.getcwd()
print(curr_path)
os.chdir(dir_path)
ch_dir = os.getcwd()
print(ch_dir)
result:
F:\study\python\qt_study\qt_project\test
F:\study\python\qt_study\qt_project\sample
os.path模块
os.path.abspath(path)
- 返回绝对路径,如查找一个相对路径的绝对路径时可以使用。
- 返回文件名,是返回最后一个反斜杠后面的内容,如果开始目录则返回最后一级目录名。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.abspath(dir_path))
print(os.path.basename(dir_path))
print(os.path.basename(file_name))
result:
F:\study\python\qt_study\qt_project\June
June
test.txt
os.path.dirname(path)
- 返回文件路径,返回的是目录名,不会返回最后一级文件名。
- 原来是啥路径就返回啥路径,原来没有,返回绝对路径,以字符串返回。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.dirname(dir_path))
print(os.path.dirname(file_name))
dir_path2 = "F:\study\python\qt_study\qt_project"
print(os.path.dirname(dir_path2))
result:
..
..\June
F:\study\python\qt_study
os.path.exists(path)
- 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.exists(dir_path))
print(os.path.exists(file_name))
result:
True
True
os.path.getsize(path)
- 返回文件大小,如果文件不存在就返回错误,是文件夹名,则返回为0。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.getsize(dir_path))
print(os.path.getsize(file_name))
result:
0
4
os.path.isabs(path)
- 判断是否为绝对路径。
- 判断是否为文件。
- 判断是否为目录。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"
print(os.path.isabs(dir_path))
print(os.path.isabs(file_name))
print(os.path.isfile(dir_path))
print(os.path.isfile(file_name))
print(os.path.isdir(dir_path))
print(os.path.isdir(file_name))
result:
True
False
False
True
True
False
os.path.join(path1[, path2[, …]])
- 把目录和文件名合成一个路径,只是把path拼起来,里面不是文件也会拼起来。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"test.txt"
dir_path2 = r"F:\study\python\qt_study\qt_project"
file_name2 = "June"
print(os.path.join(dir_path, file_name))
print(os.path.join(dir_path2, file_name2))
result:
F:\study\python\qt_study\qt_project\June\test.txt
F:\study\python\qt_study\qt_project\June
os.path.split(path)
- 把路径分割成 dirname 和 basename,返回一个元组,其实就是把最后一级分开,放于元组中。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"
print(os.path.split(dir_path))
print(os.path.split(file_name))
result:
('F:\study\python\qt_study\qt_project', 'June')
('..\June', 'test.txt')
os.path.splitext(file)
- 分割路径,返回路径名和文件扩展名的元组。
- 可以用来取文件的后缀。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"
print(os.path.splitext(dir_path))
print(os.path.splitext(file_name))
('F:\study\python\qt_study\qt_project\June', '')
('..\June\test', '.txt')
文件或文件夹重命名
os.rename文件或文件夹重命名
- 用于重命名文件或目录。
- 该方法没有返回值。
os.rename(os.rename(src, dst))
os.renames(old, new)
- 递归地对目录进行更名,也可以对文件进行更名
import os
# 返回当前工作目录
cwd = os.getcwd()
# 列出目录文件夹
path_file = os.listdir(cwd)
print("当前目录下的文件及文件夹: %s" % path_file)
# 重命名
os.rename("test2", "test_rename")
os.rename("test2.txt", "test_rename.txt")
# 列出修改文件夹名和文件名后的目录文件夹
print("目录为: %s" % os.listdir(os.getcwd()))
创建目录
os.mkdir(文件夹/文件名字)
- os.mkdir() 方法用于创建目录。
- path -要创建的目录,可以是相对或者绝对路径。
- 如果目录已经存在,则报错。
- 不能连续创立文件夹,子文件夹,只能一级一级来。
- .\ 就表示当前所在目录,…\ 表示当前所在目录的父目录。
# 在当前路径下创建名字为June的文件夹
import os
# 返回当前工作目录
cwd = os.getcwd()
os.mkdir(cwd+r"\June")
# 在June的文件夹下创建txt文件
import os
cwd = os.getcwd()
os.mkdir(cwd + r"\June")
path = cwd + r"\June"
os.mkdir(path + r"\JuneJuly.txt")
# 在June的文件夹下创建txt文件,使用相对路径
import os
cwd = os.getcwd()
os.mkdir(cwd + r"\June")
os.mkdir(r".\June\relative.txt")
os.makedirs(path[, mode])
- 递归文件夹创建函数。像mkdir(), 但是会把所有不存在的目录都创建。
- 目录存在时报错。
import os
dir_path = r"..\June"
print(os.listdir(dir_path))
os.makedirs(dir_path+"\" + "Lucy\Jim\" + "l1.txt")
print(os.listdir(dir_path))
dir_path2 = dir_path+"\" + "Lucy"
print(os.listdir(dir_path2))
result:
[]
['Lucy']
['Jim']
删除系列
os.rmdir(文件夹路径)
- 删除指定的目录,即文件夹(不能删除文件),但是只能删除空的文件夹。
- 当删除的文件夹不为空时,报OSError错误。
import os
dir = os.listdir("..\June")
print(dir)
os.rmdir("..\June\Lucy")
dir = os.listdir("..\June")
print(dir)
result:
['Lucy']
[]
os.removedirs(文件夹路径)
- 用于递归删除目录, 如果子文件夹成功删除, removedirs()才尝试删除上一层的文件夹,直到文件不为空。
- 当删除的最下层文件夹不为空时,报OSError错误。
os.remove()
- os.remove() 方法用于删除指定路径的文件。
- 如果指定的路径是一个目录,将抛出PermissionError。
import os
dir = os.listdir(r"..\June")
print(dir)
os.remove(r"..\June\test.txt")
dir = os.listdir(r"..\June")
print(dir)
result:
['Lucy', 'test.txt']
['Lucy']
应用举例
- 删除一个文件夹
文件夹下面会有子目录,每一层可能有文件和文件夹。
我们已知的这些方法中只能删除空文件夹或者文件。
决定先把文件一个个删掉,等成了空文件夹以后再删文件夹。
import os
dir_path = "..\June"
def remove_dir(path_name):
dir_list = os.listdir(path_name)
for i_dir in dir_list:
name = os.path.join(path_name, i_dir)
if not os.path.isdir(name): #文件夹为空时删除
os.remove(name)
else:
remove_dir(name) #递归调用
os.rmdir(name)
remove_dir(dir_path)
os.rmdir(dir_path)
- 复制文件夹
文件夹下的所有内容都复制到另一个文件夹。
文件复制的本质是读取一个地方的东西,然后写入另一个地方。
# 将June\p1文件夹的内容全赋值到p2文件夹中
import os
src_path = r"..\June\p1"
dst_path = r"..\June\p2"
def copy_path(src_path, dst_path):
all_dir = os.listdir(src_path)
if os.path.isdir(src_path) and os.path.isdir(dst_path):
for i_dir_file in all_dir:
src_path_tmp = os.path.join(src_path, i_dir_file)
dst_path_tmp = os.path.join(dst_path, i_dir_file)
if os.path.isdir(src_path_tmp):
os.makedirs(dst_path_tmp)
copy_path(src_path_tmp, dst_path_tmp)
else:
with open(src_path_tmp, "rb") as fp_read:
msg = fp_read.read()
with open(dst_path_tmp, "wb") as fp_write:
fp_write.write(msg)
else:
print("不是文件夹")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)