前言
在自学笔记一的时候我已经学了文件的读写,那是学的基础,现在是开始学习办公自动化,要多角度、深度了解。
一、os.scandir()
os.scandir() 是 Python 中的一个函数,用于获取文件系统中目录的迭代器。它可以遍历指定目录中的所有条目,包括文件和子目录。os.scandir() 方法返回一个 os.DirEntry 迭代器对象,它非常轻巧方便,并且能告诉你迭代文件的路径。
使用 os.scandir() 方法比使用 os.walk() 方法更高效,因为 os.walk() 方法会遍历整个目录树,而 os.scandir() 方法只会遍历指定目录。
os.scandir() 返回的迭代器对象需要用for循环来调用,我们用代码来看看输出的是什么:
import os for file in os.scandir(): print(file)
输出结果为:
<DirEntry 'Dome.py'>
<DirEntry 'new.xls'>
<DirEntry '表格合并.py'>
将目录下所有的文件都输出了,我们可以继续调用stat()方法,查看文件的属性。代码如下:
import os for file in os.scandir(): print(file.stat())
输出为:
可以看出,内容里面包含文件的大小,还有文件的创建时间、修改时间和访问时间。我们来试试输出文件的创建时间:
import os for file in os.scandir(): print(file.stat().st_ctime)
确实输出时间了,但是是我们看不懂的时间:
1688730869.341578
1687012891.5642674
1687068649.1589775
下面我们使用datetime,将时间格式改成我们日常生活中使用的时间格式:
import os import datetime for file in os.scandir(): print(datetime.datetime.fromtimestamp(file.stat().st_ctime))
输出为:
2023-07-07 19:54:29.341578
2023-06-17 22:41:31.564267
2023-06-18 14:10:49.158978
二、临时文件和临时文件夹
tempfile()是Python标准库中的一个模块,用于创建临时文件和目录。它可以跨平台使用,包括Windows、Linux和macOS等。该模块提供了四个函数:TemporaryFile()、NamedTemporaryFile()、TemporaryDirectory()和SpooledTemporaryFile(),这些函数都带有自动清理功能,可用作上下文管理器。其中,TemporaryFile()和NamedTemporaryFile()是最常见的两个函数,它们都可以创建一个临时文件对象,当文件对象被关闭时,临时文件将被自动删除。而TemporaryDirectory()和SpooledTemporaryFile()则是用于创建临时目录和缓冲区文件的函数。
1、创建临时文件
我们来看一个简单的代码,学习下怎样创建临时文件:
from tempfile import TemporaryFile with TemporaryFile('w+') as file: file.write('我是一个临时文件') print(file.name) file.seek(0) print(file.readlines())
输出结果为:
C:\Users\ADMINI~1\AppData\Local\Temp\tmpdms710yj
['我是一个临时文件']
可以看出,这个文件的地址是“C:\Users\ADMINI~1\AppData\Local\Temp\tmpdms710yj”,file.seek(0)的意思是把光标移动到最开始的位置,然后读取,我们可以试试是否是从光标的位置读取,例如下面代码:
from tempfile import TemporaryFile with TemporaryFile('w+') as file: file.write('我是一个临时文件') print(file.name) file.seek(4) print(file.readlines())
按照我们上面说的,应该是从第四个字节开始读取,输出结果是
C:\Users\ADMINI~1\AppData\Local\Temp\tmp82yzs4dc
['一个临时文件']
我们可以看见文件的地址换了,说明确实是临时文件,之前的文件已经删除,同时一个汉字两个字节,所以“我是”没有了,从后面开始读取,内容为“一个临时文件”。
2、创建临时文件夹
下面我们再看看临时文件夹怎么创建,代码如下:
from tempfile import TemporaryDirectory with TemporaryDirectory() as t: print(t)
输出结果为:
C:\Users\ADMINI~1\AppData\Local\Temp\tmpcy74dyo0
很明显,这就是临时文件夹的位置,我们再运行一次程序,理论上文件夹的名字是要变化的,是创建了一个新文件夹,我们来试下,输出结果为:
C:\Users\ADMINI~1\AppData\Local\Temp\tmpx_kr8bau
三、创建文件夹和多层文件夹
1、创建文件夹
首先使用mkdir创建文件夹,代码如下:
Import os os.mkdir(‘文件夹1’)
这时我们创建了文件夹名字叫“文件夹1”的文件夹,这里要注意,不能创建已有的文件夹,系统会报错。
2、创建多层文件夹
在Python中,可以使用`os.makedirs()`函数来创建文件夹和多层文件夹。该函数可以递归地创建多级目录,如果目录已经存在,则不会报错。
以下是使用`os.makedirs()`函数创建文件夹和多层文件夹的示例代码:
import os # 创建一个名为"my_folder"的文件夹 if not os.path.exists("my_folder"): os.makedirs("my_folder") # 在"my_folder"文件夹下创建一个名为"sub_folder"的子文件夹 if not os.path.exists("my_folder/sub_folder"): os.makedirs("my_folder/sub_folder") # 在"my_folder/sub_folder"文件夹下创建一个名为"grand_sub_folder"的子文件夹 if not os.path.exists("my_folder/sub_folder/grand_sub_folder"): os.makedirs("my_folder/sub_folder/grand_sub_folder")
在上面的代码中,我们首先检查是否存在名为"my_folder"的文件夹,如果不存在,则使用`os.makedirs()`函数创建它。然后,我们在"my_folder"文件夹下创建一个名为"sub_folder"的子文件夹,并在其中创建一个名为"grand_sub_folder"的子文件夹。注意,在创建多层文件夹时,需要使用相对路径或绝对路径来指定要创建的文件夹名称。
其实可以直接创建最里层的文件夹,代码如下:
Import os os.makedirs(‘第一层文件夹/第二层文件夹/第三层文件夹’)
这样就直接把第一层文件夹、第二层文件夹和第三层文件夹都创建出来了
四、复制文件和文件夹
在Python中,我们可以使用`shutil`模块中的函数来复制文件和文件夹。对于文件,我们可以使用`shutil.copy()`函数来复制文件,它接受两个参数:源文件路径和目标文件路径。对于文件夹,我们可以使用`shutil.copytree()`函数来复制整个文件夹,它也接受两个参数:源文件夹路径和目标文件夹路径。
import shutil # 复制文件 shutil.copy('source_file.txt', 'destination_file.txt') # 复制文件夹 shutil.copytree('source_folder', 'destination_folder')
在上面的代码中,我们首先导入了`shutil`模块。然后,我们使用`shutil.copy()`函数将名为"source_file.txt"的文件复制到同样的位置,并重命名为"destination_file.txt"的新文件。接下来,我们使用`shutil.copytree()`函数将名为"source_folder"的文件夹复制到名为"destination_folder"的新文件夹中。请注意,如果目标文件夹不存在,则会自动创建它,如果目标文件夹已存在就会报错。
五、移动文件和文件夹
在Python中,我们可以使用`shutil`模块中的函数来移动文件和文件夹。对于文件,我们可以使用`shutil.move()`函数来移动文件,它接受两个参数:源文件路径和目标文件路径。对于文件夹,我们可以使用`shutil.rmtree()`函数先删除原文件夹,然后使用`shutil.copytree()`函数将文件夹复制到新位置,最后使用`os.remove()`函数删除原文件夹。
以下是一个示例代码,演示了如何使用`shutil`模块中的函数来移动文件和文件夹:
import shutil import os # 移动文件 shutil.move('source_file.txt', 'destination_file.txt') # 移动文件夹 src_folder = 'source_folder' dst_folder = 'destination_folder' if os.path.exists(src_folder): shutil.rmtree(src_folder) shutil.copytree(src_folder, dst_folder) os.remove(src_folder)
在上面的代码中,我们首先导入了`shutil`和`os`模块。然后,我们使用`shutil.move()`函数将名为"source_file.txt"的文件移动到名为"destination_file.txt"的新文件中。接下来,我们定义了源文件夹路径`src_folder`和目标文件夹路径`dst_folder`,并检查源文件夹是否存在。如果存在,则使用`shutil.rmtree()`函数删除它。然后,我们使用`shutil.copytree()`函数将源文件夹复制到目标文件夹。最后,我们使用`os.remove()`函数删除源文件夹。
总结
以上就是今天要讲的内容。