python中可以使用os
及shutill
模块进行文件和目录的操作。其中os
可以执行简单的文件及文件夹操作。而shutil
则提供了大量文件的高级操作,特别针对文件的拷贝删除。
import os
# 注:有些函数封装在os.path中
import shutil
os.path.isabs() # 判断是否绝对路径
os.path.exists() # 判断是否真实纯在
os.path.isdir() # 判断是否是个目录
os.path.isfile() # 判断是否是个文件
注意:将两个路径合成一个时,不要直接拼字符串,而要通过os.path.join(part1,part2)
函数,这样可以正确处理不同操作系统的路径分隔符。在Linux/Unix/Mac下,os.path.join()
返回字符串形式为part1/part2,而Windows下会返回字符串形式为part1\part2。
import os
import shutil
file_dir = "D:\\Python_os\\os" # 注意 \\ ;windows 下是这么表示的;Linux 和 Mac 是 /
file_name = "test.txt"
file_abs = os.path.join(file_dir, file_name) # os.path.join(...) 表示路径链接
'''判断路径或文件'''
print (1,os.path.isabs(file_dir)) 1. True # 判断是否绝对路径
print (2,os.path.isabs(file_name)) 2. False
print (3,os.path.isabs(file_abs)) 3. True
print (4,os.path.exists(file_abs)) 4. True # 判断是否真实存在
print (5,os.path.exists(os.path.join(file_dir,"xxx"))) 5. False
print (6,os.path.isdir(file_dir)) 6. True # 判断是否是个目录
print (7,os.path.isdir(file_abs)) 7. False
print (8,os.path.isfile(file_dir)) 8. False # 判断是否是个文件
print (9,os.path.isfile(file_abs)) 9. True
os.path.split(...) # 分隔目录和文件名/文件夹名
os.path.splitdrive(...) # 分隔盘符(windows系统)
os.path.splitext(...) # 分隔文件和扩展名
注:这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。
os.getcwd() # 获取当前工作目录
os.chdir(...) # 改变工作目录
os.listdir(...) # 列出目录下的文件
os.mkdir(...) # 创建单个目录 注意:创建多级用 os.makedirs()
os.makedirs(...) # 创建多级目录
import os
file_dir = "D:\\Python_os\\os"
print (os.getcwd()) # 获取当前工作目录
os.chdir(file_dir) # 改变工作目录
print (os.getcwd())
print (os.listdir(file_dir)) # 列出当前工作目录的所有文件 Python2 不支持 os.listdir() Python3 会列出当前工作目录下的所有文件
os.mkdir("test_mkdir") # 在当前工作目录下创建文件夹 test_mkdir;注意不可存在相同文件夹,不然会报错
os.makedirs("test_mkdir\\test1")
os.chdir(".\\test_mkdir") # . 表示本级目录; .. 表示上级目录
print (os.getcwd())
for i in range(2,6): # 使用for循环等,可方便的创建多个文件夹
dir_name = "test" + str(i)
os.mkdir(dir_name)
参数补充:
- os.makedirs(os.path.join(‘…’, ‘data’),exist_ok=True) exist_ok默认为False,如果在要创建的路径中有同名文件则会抛出
OSError
.
os.rmdir(...) # 删除空文件夹 注意:必须为空文件夹 如需删除文件夹及其下所有文件,需用 shutil
os.remove(...) # 删除单一文件
shutil.rmtree(...) # 删除文件夹及其下所有文件
import os
import shutil
file_dir = "D:\\Python_os\\os"
''' 删除文件/文件夹 '''
os.chdir(file_dir+"\\test_mkdir")
print(os.getcwd()) # 确保当前工作目录
print(os.listdir(os.getcwd())) # 查看当前文件夹下所有文件
os.rmdir("test1") # 删除 test1 文件夹(空文件夹)
print(os.listdir(os.getcwd()))
os.chdir("..\\")
print(os.getcwd()) # 切换到上级目录
print(os.listdir(os.getcwd()))
shutil.rmtree("test_mkdir") # 删除 test_mkdir 及其下所有文件
注:
可对某一文件或文件夹重命名 os.rename(oldfileName, newFilename)
在os文件夹中新建文件夹 test,文件 test.txt
''' 重命名文件夹/文件 '''
os.chdir(file_dir)
print(os.listdir(os.getcwd()))
os.rename("test","test1")
os.rename("test.txt","test1.txt") # 重命名,注意需要带扩展名
print(os.listdir(os.getcwd()))
必须使用shutil
模块,引入 import shutil
shutil.copyfile("old","new") # 复制文件,都只能是文件
shutil.copytree("old","new") # 复制文件夹,都只能是目录,且new必须不存在
shutil.copy("old","new") # 复制文件/文件夹,复制 old 为 new(new是文件, 若不存在,即新建),复制 old 为至 new 文件夹(文件夹已存在)
shutil.move("old","new") # 移动文件/文件夹至 new 文件夹中
我们先在D:\下创建新文件夹Python_shutil,然后工作目录切到该目录:
import os
import shutil
os.chdir("D:\\")
os.mkdir("Python_shutil")
file_dir = "D:\\Python_shutil"
os.chdir(file_dir)
为演示复制、移动操作,我们在该文件夹下手动操作 新建文件夹 test_org、 test_copy 及 test_move; 新建文件 test.txt test1.txt , 两者内容不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fZNmGjJ-1640512083387)(G:\笔记\image\dir.png)]
import os
import shutil
file_dir = "D:\\Python_shutil"
os.chdir(file_dir)
shutil.copyfile("test_org.txt","test_copy.txt") # copy test_org.txt 为 test_copy.txt 若存在,则覆盖
shutil.copyfile("test_org.txt","test1.txt") # 存在,覆盖
shutil.copytree("test_org","test_copytree") # copy test_org 为test_copytree(不存在的新目录)
shutil.copy("test_org.txt","test_copy1.txt") # 同 copyfile
shutil.copy("test_org.txt","test_copy") # 将文件 copy 至 目标文件夹中(须存在)
shutil.copy("test_org.txt","test_xxx") # 将文件 copy 至 目标文件(该文件可不存在,注意类型!)
print os.listdir(os.getcwd())
shutil.move("test_org.txt","test_move") # 将文件 move 至 目标文件夹中
shutil.move("test_org","test_move") # 将文件夹 move 至 目标文件夹中
print os.listdir(os.getcwd())
当我们只需要某一文件夹下,单层文件和文件夹(不包括文件夹中的子文件)的名称时,我们使用函数os.listdir(path)
:该方法可以返回目标路径下的文件和文件夹的名字列表,参数就是目标路径。
使用listdir
方法**只能获得给定路径中的第一层子文件或子文件夹,而子文件夹中的内容获取不到。**这时使用os.walk()
方法,可以递归的找出目标路径下的所有文件!
def get_files():
for filepath,dirnames,filenames in os.walk(r'E:\test2'):
for filename in filenames:
print (filename)
函数返回值(每一层遍历):
filepath
保存的是当前遍历的文件夹的绝对路径。dirsnames
保存当前文件夹下所有子文件夹的名称(仅一层孙子文件夹不包括)filenames
保存当前文件夹下所有文件的名称。注:遍历文件夹的先后关系,os.walk
具体结果参考文章os.walk
with open(data_file,'w') as f:
# data_file : 文件地址,以写的方式打开文件
f.write('NumRooms,Alley,Price\n') # 列名
f.write('NA,Pave,127500\n') # 每行表示一个数据样本
f.write('2,NA,10600\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
# data_file : 文件地址,以写的方式打开文件
f.write('NumRooms,Alley,Price\n') # 列名
f.write('NA,Pave,127500\n') # 每行表示一个数据样本
f.write('2,NA,10600\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')