小白学Python,操作文件和文件夹
目录
前言
一、操作文件路径
1.获取当前路径
2.创建文件夹
(1)mkdir()函数
(2)makedirs() 函数
3.拼接路径
4.跳转路径
5.判断相对路径和绝对路径
6.获取文件路径和文件名
二、操作文件和文件夹
1.查询文件大小
2.删除文件和文件夹
3.重命名文件或文件夹
4.复制文件
5.获取文件夹中的全部文件名
6.判断文件和文件夹
前言
Python标准库提供了os库来管理操作系统相关功能,无须下载、安装,os库包含丰富的操作文件的方法,可以通过import os导入库之后使用dir(os)查询获取。
一、操作文件路径
1.获取当前路径
os库中的getcwd()函数可用于获取当前代码所在文件夹的绝对路径(不包含代码文件名)。
示例代码:
import os
print(os.getcwd())
代码执行结果:
E:\书代码\第9章
2.创建文件夹
os库中有两种用于创建文件夹的函数,分别为mkdir()函数和makedirs()函数。
(1)mkdir()函数
在os库中使用mkdir(路径)函数可以实现在路径中创建一个新的文件夹。 示例代码:
import os 02 os.mkdir(r'E:\书代码\第9章\数据1')
注意,必须保证“E:\书代码\第9章”这个路径是正确的,否则会无法创建新文件夹。例如将以上代码第2行中的路径修改为“E:\书代码1”,由于并不存在“书代码1”这个文件夹,因此无法在“书代码1”文件夹中创建新的文件夹,执行代码后将输出报错信息。
(2)makedirs() 函数
在os库中makedirs(路径)函数是根据参数来递归创建文件夹,递归表示根据路径创建包含的全部文件夹。 示例代码:
import os
os.makedirs(r'E:\书代码1\数据1\内容b')
第2行代码使用makedirs()函数创建了文件夹,由于E盘下并没有文件夹“书代码1”,因此代码执行之后会在E盘中连续创建3个文件夹,其中“书代码1”文件夹包含“数据1”文件夹,“数据1”文件夹包含“内容b”文件夹。
因此mkdir()函数和makedirs()函数的区别在于是否可以递归创建文件夹。
示例代码(批量创建200个文件夹):
import os
for i in range(1, 201):file_name = '文件夹' + str(i)file_path = os.getcwd() + '\数据1\' + file_nameos.mkdir(file_path)
3.拼接路径
使用os.path.join()方法可以实现将参数拼接为目录路径,从而方便且快速地获取文件地址。
示例代码:
import os
dir_new = os.path.join(os.getcwd(), '数据2', '内容c')
print(dir_new, type(dir_new))
第2行代码中的os.getcwd()函数用于获取当前代码所在文件夹的路径,os.path.join()方法将当前路径、'数据2'和'内容c'以路径的形式进行拼接(无须考虑构成路径的转义字符等问题)。
代码执行结果:
E:\书代码\第9章\数据2\内容c <class 'str'>
4.跳转路径
如果需要在程序中实现从当前代码所在文件夹路径跳转到其他路径,可以使用os库中的chdir(路径)函数,但要注意路径必须是已经存在的,否则运行代码后会出现报错。
示例代码:
import os
print(os.getcwd())
os.chdir('E:\书代码\第9章\数据2')
print(os.getcwd())
第3行代码使用os.chdir()将当前工作路径修改为“E:\书代码\第9章\数据1”,即改变了当前工作路径的唯一性。修改当前工作路径是为了便于后期可以使用相对路径操作新路径下的文件。
代码执行结果:
E:\书代码\第9章
E:\书代码\第9章\数据1
5.判断相对路径和绝对路径
使用os.path.isabs(path)方法可以判断当前路径是相对路径还是绝对路径。
示例代码:
import os
a = os.path.isabs('数据2\内容c')
b = os.path.isabs('E:\书代码')
print(a, b)
第2行和第3行代码分别判断路径是绝对路径还是相对路径,如果是绝对路径将返回True,如果是相对路径将返回False。
代码执行结果:
False True
6.获取文件路径和文件名
os库的path模块下的basename(path)方法可用于获取路径中的文件名,dirname(路径)方法可用于获取路径中的文件夹路径,split(路径)方法可用于将获取的文件夹路径和文件名以元组的形式返回。
示例代码:
import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.txt'
file_name = os.path.basename(path)
dir_name = os.path.dirname(path)
file_dir_name = os.path.split(path)
print(file_name, '\n', dir_name, '\n', file_dir_name)
第3行代码获取路径中的文件名,第4行代码获取文件夹路径,第5行代码获取文件夹路径和文件名并以元组形式返回。
代码执行结果:
Python程序代码1.txt
E:\书代码\数据2\内容c
('E:\书代码\数据2\内容c', 'Python程序代码1.txt')
二、操作文件和文件夹
1.查询文件大小
使用os库的path模块下的getsize(path)丰富可以获取路径中的文件所占用内存的大小,单位为字节。
示例代码:
import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.txt'
print(os.path.getsize(path))
该代码用于获取Python程序代码1.txt文件的大小,执行代码后的输出结果为962,单位为字节(1024个字节为1KB)。
2.删除文件和文件夹
os库中的remove(path)方法可用于删除path中的文件。
示例代码:
import os
os.remove(r'E:\书代码1\数据1\内容b\dwed.txt')
如果在文件夹“E:\书代码1\数据1\内容b”中存在一个dwed.txt文件,执行第2行代码后,该文件将会被删除。
os库中的rmdir(path)方法可用于删除path中的最后一层文件夹,不能递归删除整个path的全部文件夹。
示例代码:
import os
os.rmdir('数据3\内层1')
执行该代码后将会删除“内层1”文件夹。
3.重命名文件或文件夹
使用os库中的rename()和renames()函数即可实现对文件或文件夹进行重命名。其使用形式如下:
os.rename(src, dst)
os.renames(src, dst)
功能: rename()函数修改指定文件夹或文件的名称,renames()函数递归修改文件夹或文件的名称。
参数src: 表示要修改的文件夹路径或文件路径。
参数dst: 表示修改后的文件夹路径或文件路径。
示例代码(将图9-1所示的所有文件夹名序号增大200):
import os
for i in range(1, 201):old = 'E:/书代码/第9章/数据1/文件夹' + str(i)new = 'E:/书代码/第9章/数据1/文件夹' + str(i + 200)os.rename(old, new) # 对文件或文件夹进行重命名
os.renames('E:/书代码/第9章/数据1/文件夹201', 'E:/书代码/第9章/数据2/文件夹201')
第2~5行代码使用for循环200次,分别获取要修改的路径old和修改后的路径new,并使用rename()函数修改文件夹名称。 第6行代码使用renames()函数将前面第2~5行代码执行后得到的文件夹“E:/书代码/第9章/数据1/文件夹201”递归修改为“E:/书代码/第9章/数据2/文件夹201”,从而间接实现了文件的移动功能。
4.复制文件
os库中的os.link()函数可用于创建硬链接以实现复制文件。其使用形式如下:
os.link(src, dst)
参数src: 表示要修改的文件夹路径或文件路径。
参数dst: 表示修改后的文件夹路径或文件路径。
示例代码(将文件复制到另一个路径中):
import os
os.link('E:/书代码/报告合集.pdf', 'E:/书代码/数据1/报告合集.pdf')
执行代码后即可将“报告合集.pdf”文件复制到“E:/书代码/数据1”路径中。
5.获取文件夹中的全部文件名
使用os库中的listdir(路径)方法即可获取文件夹中的全部文件名(包含文件和文件夹的名称)。
示例代码:
import os
print('相对路径中有:', os.listdir('.'))
代码执行结果:
相对路径中有: ['数据1', '数据2', '第9章第1个程序.py', '第9章第3个程序.py', '第9章第5个程序.py']
代码结果是以列表的形式输出的路径中的全部内容,其中数据1、数据2和数据3是文件夹,其余内容均为文件。
在办公领域中,获取文件夹中的全部文件是较为常见的操作,当需要对一系列的文件进行操作时,可以先将这一系列的文件存放在同一个文件夹中,然后通过os.list()方法遍历并获取文件,再对文件进行操作。
示例代码(统计当前文件夹中所有文件占用空间的大小):
import os
file_total_size = 0
for file_name in os.listdir('.'):file_dir = os.path.join(os.getcwd(), file_name)file_total_size += os.path.getsize(file_dir)
print(file_total_size/1024)
第2行代码使用file_total_size来统计所有文件占用的空间,初始时为0。
第3行代码使用os.listdir('.')获取文件夹内所有文件的名称,并以列表的形式返回作为循环内容,依次赋值给变量file_name。
第4行代码构建每个文件的完整路径,包含路径和文件名。
第5行代码通过getsize()方法获取文件的大小,并将其累加到file_total_size变量中。循环结束后输出file_total_size/1024的值,输出的值的单位为KB。
代码执行结果:
45.3408203125
结果表明此文件夹一共约占45KB的内存。
6.判断文件和文件夹
os库中提供了以下3种用于判断path是文件还是文件夹的方法。
第1种,os.path.exists(path)。判断path所指的文件或文件夹是否存在,如果存在则返回True,否则返回False。
第2种,os.path.isfile(path)。判断path是否为文件,如果是文件则返回True,否则返回False。
第3种,os.path.isdir(path)。判断path是否为文件夹,如果是文件夹则返回True,否则返回False。
示例代码:
import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.txt'
print(os.path.exists(path), end='\t')
print(os.path.isfile(path), end='\t')
print(os.path.isdir(path), end='\t')
该代码分别使用了这3种方法来判断变量path表示的路径。
代码执行结果:
True True False
注意,当文件夹存在但文件夹中的文件不存在时,执行3种方法后都会返回False。