python 文件夹_Python 文件夹及文件操作

import os

import os.path

from shutil import copy

def copyfile(src, dst):

count = 1

for filename in os.listdir(src):

file = os.path.join(src,filename)

copy(file, dst)

count += 1

#if count == 40000:

# break

return

src = "/home/data/fac"

dst = "/home/data/ob/"

copyfile(src=src, dst=dst)

我们经常会与文件和目录打交道,对于这些操作,python可以使用 os 及 shutill 模块,其中包含了很多操作文件和目录的函数。

os 可以执行简单的文件夹及文件操作,引入用 import os,可用 help(os) 或是 dir(os) 查看其用法。注意有些函数在os模块中,有的是在os.path模块中。

shutil 模块提供了大量的文件的高级操作,特别针对文件拷贝和删除。主要功能为目录和文件操作以及压缩操作。须引入 import shutil ,具体 help。本文仅介绍移动、复制及删除。

可先在 D:\ 下创建文件夹 Python_os , 再在其下创建文件夹 os, 再在其下创建 test.txt;之后的示例会在该文件夹下操作

判断路径或文件

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

copycode.gif

1 import os

2 import shutil

3

4 file_dir = "D:\\Python_os\\os" # 注意 \\ ;windows 下是这么表示的;Linux 和 Mac 是 /

5 file_name = "test.txt"

6 file_abs = os.path.join(file_dir, file_name) # os.path.join(...) 表示路径链接

7

8

9 '''判断路径或文件'''

10 print (1,os.path.isabs(file_dir)) # 判断是否绝对路径

11 print (2,os.path.isabs(file_name))

12 print (3,os.path.isabs(file_abs))

13 print (4,os.path.exists(file_abs)) # 判断是否真实存在

14 print (5,os.path.exists(os.path.join(file_dir,"xxx")))

15 print (6,os.path.isdir(file_dir)) # 判断是否是个目录

16 print (7,os.path.isdir(file_abs))

17 print (8,os.path.isfile(file_dir)) # 判断是否是个文件

18 print (9,os.path.isfile(file_abs))

copycode.gif

运行结果:

xsCATpr6wAA8wNOApAuvluDkwCkCTgJQLqAkwCkCzgJQLqAkwCkCzgJQLqAkwCkCzgJQLqAkwCkCzgJQLqAkwCkCzgJQLqAkwCkCzgJQKr4P+iAGjbNCXNKAAAAAElFTkSuQmCC

路径名、文件名分隔

os.path.split(...)    # 分隔目录和文件名/文件夹名

os.path.splitdrive(...)# 分隔盘符(windows系统)

os.path.splitext(...) # 分隔文件和扩展名

运行结果:

sluneYaLkMvx7qBYCW9TG8l7mkCvAoKMFEorUJQUlCet3I9YSHeNRBoG4SghuymNeE9RyX4k17J7CepdPv17JO8GFYeGFPr2YYgUJpS4RoIBAJtkj4BroFAoC0TcA0EAm2bgGsgEGjbBFwDgUDbJuAaCATaNgHXQCDQtgm4BgKBtk3ANRAItG365EUNuAYCgbZKn7yoYbQB10Ag0DYIuAYCgbZNwDUQCLRl+n9IGxj1ieByqQAAAABJRU5ErkJggg==

这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。

工作目录及创建文件夹操作

os.getcwd()     # 获取当前工作目录

os.chdir(...)     # 改变工作目录

os.listdir(...)    # 列出目录下的文件

os.mkdir(...)     # 创建单个目录     注意:创建多级用 os.makedirs()

os.makedirs(...)  # 创建多级目录

copycode.gif

1 import os

2

3 file_dir = "D:\\Python_os\\os"

4

5 print (os.getcwd()) # 获取当前工作目录

6 os.chdir(file_dir) # 改变工作目录

7 print (os.getcwd())

8 print (os.listdir(file_dir)) # 列出当前工作目录的所有文件 Python2 不支持 os.listdir() Python3 会列出当前工作目录下的所有文件

9 os.mkdir("test_mkdir") # 在当前工作目录下创建文件夹 test_mkdir;注意不可存在相同文件夹,不然会报错

10 os.makedirs("test_mkdir\\test1")

11 os.chdir(".\\test_mkdir") # . 表示本级目录; .. 表示上级目录

12 print (os.getcwd())

13 for i in range(2,6): # 使用for循环等,可方便的创建多个文件夹

14 dir_name = "test" + str(i)

15 os.mkdir(dir_name)

copycode.gif

在执行了上述实例代码后,os 文件夹中新建了空的 test_mkdir 文件夹,而 test_dir 文件夹下也新建出了 test1 至 test5 的空文件夹

创建文件夹可能会出错,原因具体有:(1) path 已存在时(不管是文件还是文件夹) (2) 驱动器不存在 (3) 磁盘已满 (4) 磁盘是只读的或没有写权限

文件的创建及操作参见下一章节

删除文件夹/文件

os.rmdir(...)         # 删除空文件夹 注意:必须为空文件夹 如需删除文件夹及其下所有文件,需用 shutil

os.remove(...) # 删除单一文件

shutil.rmtree(...) # 删除文件夹及其下所有文件

在上方示例的文件夹基础上,操作删除 test1 文件夹 (空文件夹可用 os.rmdir() ),删除 test_mkdir 及其下所有文件();示例代码如下

copycode.gif

1 import os

2 import shutil

3

4 file_dir = "D:\\Python_os\\os"

5

6 ''' 删除文件/文件夹 '''

7 os.chdir(file_dir+"\\test_mkdir")

8 print(os.getcwd()) # 确保当前工作目录

9 print(os.listdir(os.getcwd())) # 查看当前文件夹下所有文件

10 os.rmdir("test1") # 删除 test1 文件夹(空文件夹)

11 print(os.listdir(os.getcwd()))

12 os.chdir("..\\")

13 print(os.getcwd()) # 切换到上级目录

14 print(os.listdir(os.getcwd()))

15 shutil.rmtree("test_mkdir") # 删除 test_mkdir 及其下所有文件

copycode.gif

可见运行结果如下;产生异常的可能原因: (1) 路径不存在 (2) 路径子目录中有文件或下级子目录(os.rmdir) (3) 没有操作权限或只读

只是删除单一文件,则用 os.remove("test.txt") 即可;产生异常的可能原因: (1) 文件不存在 (2) 对该文件没有操作权限或只读。

重命名文件夹/文件

可对某一文件或文件夹重命名 os.rename(oldfileName, newFilename)

在os文件夹中新建文件夹 test,文件 test.txt

copycode.gif

1 ''' 重命名文件夹/文件 '''

2 os.chdir(file_dir)

3 print(os.listdir(os.getcwd()))

4 os.rename("test","test1")

5 os.rename("test.txt","test1.txt") # 重命名,注意需要带扩展名

6 print(os.listdir(os.getcwd()))

copycode.gif

可见运行结果如下;产生异常的可能原因: (1) oldfilename 旧文件名不存在(文件须带扩展名) (2)newFilename 新文件已经存在

注意:新文件的扩展名不能遗漏,理论上需要保持类型一致;但这也不失为改文件类型的一种方式(相当于直接改文件的扩展名)

复制、移动文件夹/文件

须使用 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 ,然后工作目录切到该目录,直接使用 Python 来操作吧,参考代码如下:

copycode.gif

1 import os

2 import shutil

3

4 os.chdir("D:\\")

5 os.mkdir("Python_shutil")

6 file_dir = "D:\\Python_shutil"

7 os.chdir(file_dir)

copycode.gif

为演示复制、移动操作,我们在该文件夹下手动操作 新建文件夹 test_org、 test_copy 及 test_move; 新建文件 test.txt test1.txt , 两者内容不同

Python 复制、移动的操作示例代码如下:

copycode.gif

1 import os

2 import shutil

3

4 file_dir = "D:\\Python_shutil"

5 os.chdir(file_dir)

6 shutil.copyfile("test_org.txt","test_copy.txt") # copy test_org.txt 为 test_copy.txt 若存在,则覆盖

7 shutil.copyfile("test_org.txt","test1.txt") # 存在,覆盖

8 shutil.copytree("test_org","test_copytree") # copy test_org 为 test_copytree(不存在的新目录)

9 shutil.copy("test_org.txt","test_copy1.txt") # 同 copyfile

10 shutil.copy("test_org.txt","test_copy") # 将文件 copy 至 目标文件夹中(须存在)

11 shutil.copy("test_org.txt","test_xxx") # 将文件 copy 至 目标文件(该文件可不存在,注意类型!)

12 print os.listdir(os.getcwd())

13 shutil.move("test_org.txt","test_move") # 将文件 move 至 目标文件夹中

14 shutil.move("test_org","test_move") # 将文件夹 move 至 目标文件夹中

15 print os.listdir(os.getcwd())

copycode.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值