python 将一个文件夹里面的内容复制到另一个文件夹里面

B站影视 2024-12-21 09:21 8

摘要:标准库是 Python 内置的库,Python 共有 300 多个标准库,这些标准库提供了基础但丰富的功能。在数据处理过程中,尤其是批量处理数据时,不可避免地需要对文件进行读写、重命名等处理,有时还需要进行目录的创建、删除、遍历等操作。Python 中的os模

标准库是 Python 内置的库,Python 共有 300 多个标准库,这些标准库提供了基础但丰富的功能。在数据处理过程中,尤其是批量处理数据时,不可避免地需要对文件进行读写、重命名等处理,有时还需要进行目录的创建、删除、遍历等操作。Python 中的os模块正是处理这些问题必备的工具库之一。

os全称为Operating System,这个模块提供了与操作系统交互的各种函数,我们可以通过这些函数调用计算机底层操作系统的部分功能来快速、高效地管理文件和目录。os 库在数据处理中一个比较常见的功能是批量读取文件路径。

如何导入库

在 Python 中,使用一个库(也称"模块"或"包")中的函数之前,需要先通过import 语句将这个库导入到当前的工作空间,Python 中导入库的方式有以下几种。

方式一:import 库名,使用该方式导入库,可以在当前工作空间中使用该库的所有函数、类、变量等。这种方式适用于需要使用库中大部分功能的情况,示例如下。

# 1.使用 import 语句导入库import 库名# 2.当我们需要同时导入多个库时,可以使用如下方式实现import 库名1,库名2,库名3,...

方式二:from 库名 import 函数名,使用该方式导入库,可以将该库中的一个或多个函数导入到当前工作空间中,直接使用即可。这种方式适用于需要使用库中某些特定功能的情况,示例如下。

# 1.导入该库中指定的方法from 库名 import 函数名# 2.下面的方式可以导入该库中所有的方法from 库名 import *

import 库名和from 库名 import 函数名这两种方式都可以导入库,但是两者是有区别的。前者会将整个模块导入,并创建一个新的命名空间,访问模块中的函数或变量时,需要使用模块名作为前缀,如module.function或module.variable;后者是将指定的函数或变量导入当前工作空间,不需要使用模块名作为前缀,可以直接访问函数或变量,如function或variable。

方式三:import 库名 as ...,使用该方式导入库,可以为库设置一个别名,以方便在程序中使用。这种方式适用于库名称较长,或者需要多次在程序中使用该库的情况

# 导入库中的某个方法,并为其设置别名from 库名 import 函数名 as 别名

方式四:from 库名 import 函数名 as ...,使用该方式导入库,可以将库中的某个方法导入到当前工作空间中,并且为其设置一个别名,以方便在程序中使用。这种方式适用于只需使用库中某些特定功能,且名称较长的情况

综上,Python 中导入库的方式比较灵活,大家可以根据需要选择最佳的方式,以达到程序简洁易读的目的。

在数据处理过程中,经常需要对文件或目录(文件夹)进行读取、创建、删除、重命名等基本操作,os 模块中都有对应的方法完成,常用的函数如下表所示。

上表中的函数常在处理系统文件或目录时发挥作用。比如,我们在数据处理时,需要在当前工作目录创建文件夹或对文件重命名,此时不用在程序之外手动对文件进行更改,直接利用os模块中的函数就可以实现。如os.rename函数可以用于实现文件的重命名以及文件或文件夹的移动,os.mkdir函数可以创建单层文件夹,无需手动创建。

1.获取、更改当前工作目录

os.getcwd函数不需要任何参数,调用该函数时,Python 会返回一个字符串,表示 Python 当前的工作路径(Python 当前的工作路径一般为程序文件当前所在目录),示例如下。

import osos.getcwd

如果想要更改当前的工作目录,就需要使用下面介绍的os.chdir函数。

os.chdir可以将 Python 的工作目录更改为指定的目录,使得我们可以通过相对路径(下文介绍)访问该目录或其子目录下的文件,简化了工作目录的文件路径。示例如下,Python 工作目录已更改为指定路径。

os.chdir('d:\数据\测试')print("当前工作目录:”os.getcwd)

2.创建、删除指定路径的目录

在os 模块中,常用于创建和删除目录的函数有以下四个。os.mkdir函数可以在指定位置创建一个空目录(空文件夹),且只能创建一级目录。如果需要一次性创建多级目录,可以使用os.makedirs函数。如果需要删除目录,可以使用os.rmdir或os.removedirs函数。

这些函数在操作文件时经常使用,比如我们想要新建一个文件夹,在程序中只要一行代码就可以实现。如果需要创建多个文件夹,可以使用os.mkdir函数结合路径的拼接来动态创建目录。如何实现路径的拼接呢?下面我们介绍 Python 中os.path 模块。

路径的常用操作

os.path模块 是Python 中处理路径信息的常用模块之一,作为os 模块的一个子模块,通常两者一起用来操作文件和目录。该模块提供了许多实用的功能,常用于获取路径的各种信息、属性;以及拼接路径、分割路径等操作。

1.绝对路径与相对路径

在数据处理过程中,经常需要使用文件路径来读取、写入文件或者访问其他资源。Python 中的文件路径分为相对路径和绝对路径。

了解路径,就一定要先了解正斜杠 '/' 和反斜杠 '\'。在 MacOS 和 Linux 系统下,路径默认使用的都是正斜杠'/',在Windows系统下,正反斜杠都可以表示路径分隔符,默认的是反斜杠 '\'。由于反斜杠本身属于转义符,如 '\n' 表示换行符、'\t' 表示横向制表符,这可能会导致使用反斜杠表示的路径在编码时无法被正确识别,如路径'D:\test',在 Python 中,'\test' 中的 '\t' 被识别为制表符,所以该路径无法被找到.

针对这种情况,通常有三种解决办法。

在每个分隔符前加一个反斜杠,原理是先将转义字符转义,例如'D:\\test'。通过非转义的原始字符 'r',在路径字符串前添加 r,例如r'D:\test'。将路径字符串中所有的反斜杠 '\' 改为正斜杠 '/' ,例如'D:/test'。

相对路径指的是相对于当前工作目录,定位文件的路径。

绝对路径指的是从根目录开始的完整路径,其不受当前工作目录的影响,始终指向相同的文件或目录。

2.操作文件路径的函数

os.path 模块中常用于处理路径字符串的函数如下表所示。

os.path.split(path)函数可以将路径分割为两部分,第一部分为路径字符串最后一个分割符前面的内容,通常为路径目录(dirname),第二部分为路径最后一个分隔符后面的内容,通常为文件名(basename)。该函数返回的是一个二元组(dirname,basename),如果路径没有文件名部分,则返回的 basename 为空字符串。

os.path.dirname(path)和os.path.basename(path)函数可以分别得到路径字符串最后一个分隔符前、后的内容,它们更适用于只需要得到路径的一个部分,而不用先将路径分割的情形。

os.path.join(path1,...)函数用于拼接路径名,在拼接路径名时,我们不需要手动添加路径分隔符,该函数会依据不同的操作系统自动添加正确的路径分隔符(在Windows中为 '\',在Linux和MacOS中为 '/')。

在实际中常见的一个路径操作是,先获取路径的一个部分,再将路径组合拼接为新的路径,可以用于创建、移动、重命名文件或目录。

os.path.join函数常与os.path.split等函数一起使用,通过后者解析路径中的目录或文件部分,使用前者进行动态的路径拼接,避免了手动添加文件路径中的分隔符,同时,在拼接路径名时,还可以使用相对路径或绝对路径,使得程序更加简洁明了。操作文件路径时,还有一个较常用的是os.path.abspath函数,该函数可以将指定路径转化为绝对路径,这样的好处在于,能够确保访问的是文件的绝对路径,避免了由于相对路径与绝对路径不一致导致的错误,同时也避免了由于操作系统不同导致的路径表达方式不同。

3.获取文件和目录属性的函数

除了操作文件路径的函数,os.path 模块还提供了能够获取文件和目录的各种相关属性的函数,下表为其中常用的一些函数。

import ossrc_path = input('输入源路径:')target_path = input('输入目标路径:')defcopy(src_path, target_path):file_list = os.listdir(src_path) # 找出当前文件夹的路径都有何文件# print(file_list)# 变量列表for file in file_list:path_src = os.path.join(src_path, file) # 将文件列表里的文件或者文件夹与原文件夹路径拼接# print(path_src)result = os.path.isdir(path_src) # 判断当前文件是否为一个文件夹# print(result)if result: # 如果是文件夹,进行递归调用path = os.path.join(target_path, file) # 在目标文件夹里面,创建同名文件夹os.mkdir(path)copy(path_src, path)else: # 如果不是文件夹,那就直接复制with open(path_src, 'rb') as rstream: # 找到源文件路径,二进制只读打开continuer = rstream.read # 读取后放到容器里面path_target = os.path.join(target_path, file) # 将文件列表里的文件或者文件夹与目标文件夹路径拼接with open(path_target, 'wb') as wstream:wstream.write(continuer) # 写入文件copy(src_path, target_path)

来源:小王课堂

相关推荐