揭秘Python文件遍历:轻松遍历文件夹下所有文件,掌握文件处理技巧
发布时间: 2024-06-22 07:38:17 阅读量: 73 订阅数: 35
![揭秘Python文件遍历:轻松遍历文件夹下所有文件,掌握文件处理技巧](https://img-blog.csdnimg.cn/20210316165951684.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg4NzI3Ng==,size_16,color_FFFFFF,t_70)
# 1. Python文件遍历简介
文件遍历是Python中一项基本操作,它允许您遍历文件系统中的文件和文件夹。它在许多任务中都很有用,例如文件管理、数据分析和软件开发。
Python提供了多种文件遍历函数,这些函数可以帮助您轻松高效地遍历文件系统。这些函数可以分为两类:基于os模块的函数和基于pathlib模块的函数。
# 2. Python文件遍历基础
### 2.1 os模块中的文件遍历函数
os模块提供了两个主要的文件遍历函数:os.walk()和os.listdir()。
#### 2.1.1 os.walk()函数
os.walk()函数以生成器的方式遍历目录树,返回一个三元组(dirpath, dirnames, filenames),其中:
- dirpath:当前目录的绝对路径。
- dirnames:当前目录下的子目录列表。
- filenames:当前目录下的文件列表。
**代码块:**
```python
import os
for root, dirs, files in os.walk("/path/to/directory"):
print(f"Current directory: {root}")
print("Subdirectories:", dirs)
print("Files:", files)
```
**逻辑分析:**
代码使用os.walk()函数遍历/path/to/directory目录树。对于每个目录,它打印当前目录的路径、子目录列表和文件列表。
#### 2.1.2 os.listdir()函数
os.listdir()函数返回指定目录下的文件和子目录列表,但它不递归遍历目录树。
**代码块:**
```python
import os
files = os.listdir("/path/to/directory")
print("Files in the directory:", files)
```
**逻辑分析:**
代码使用os.listdir()函数获取/path/to/directory目录中的文件和子目录列表,并将其存储在files变量中。
### 2.2 pathlib模块中的文件遍历函数
pathlib模块提供了两个主要的文件遍历函数:Path.glob()和Path.iterdir()。
#### 2.2.1 Path.glob()方法
Path.glob()方法返回一个匹配指定模式的文件和目录的生成器。
**代码块:**
```python
from pathlib import Path
path = Path("/path/to/directory")
for file in path.glob("*.txt"):
print(file)
```
**逻辑分析:**
代码使用Path.glob()方法获取/path/to/directory目录中所有以.txt结尾的文件。
#### 2.2.2 Path.iterdir()方法
Path.iterdir()方法返回一个当前目录中文件和目录的迭代器。
**代码块:**
```python
from pathlib import Path
path = Path("/path/to/directory")
for file in path.iterdir():
print(file)
```
**逻辑分析:**
代码使用Path.iterdir()方法获取/path/to/directory目录中的所有文件和目录。
# 3.1 过滤文件和文件夹
在文件遍历过程中,我们经常需要根据特定条件过滤文件和文件夹。Python提供了多种方法来实现这一目的。
#### 3.1.1 使用lambda表达式
lambda表达式是一种匿名函数,可以作为参数传递给其他函数。在文件遍历中,我们可以使用lambda表达式来过滤文件和文件夹。
```python
import os
# 过滤当前目录下的所有以.py结尾的文件
files = [f for f in os.listdir('.') if f.endswith('.py')]
# 过滤当前目录下的所有文件夹
directories = [d for d in os.listdir('.') if os.path.isdir(d)]
```
#### 3.1.2 使用os.path.isfile()和os.path.isdir()函数
os模块提供了`os.path.isfile()`和`os.path.isdir()`函数来检查文件或文件夹是否存在。我们可以使用这些函数来过滤文件和文件夹。
```python
import os
# 过滤当前目录下的所有文件
files = [f for f in os.listdir('.') if os.path.isfile(f)]
# 过滤当前目录下的所有文件夹
directories = [d for d in os.listdir('.') if os.path.isdir(d)]
```
### 3.2 递归遍历文件夹
在某些情况下,我们需要递归遍历文件夹,即遍历文件夹及其所有子文件夹。Python提供了多种方法来实现这一目的。
#### 3.2.1 使用os.walk()函数的topdown参数
os.walk()函数的`topdown`参数控制遍历的顺序。如果`topdown`为`True`,则函数将首先遍历根目录,然后遍历子目录。如果`topdown`为`False`,则函数将首先遍历子目录,然后遍历根目录。
```python
import os
# 递归遍历当前目录及其所有子目录
for root, directories, files in os.walk('.', topdown=True):
for name in files:
print(os.path.join(root, name))
```
#### 3.2.2 使用pathlib.Path.rglob()方法
pathlib模块提供了`Path.rglob()`方法,可以递归遍历文件夹及其所有子文件夹。
```python
from pathlib import Path
# 递归遍历当前目录及其所有子目录
for file in Path('.').rglob('*'):
print(file)
```
# 4. Python文件遍历实践应用
在掌握了Python文件遍历的基础和高级技巧后,让我们探讨一下其在实际应用中的用法。
### 4.1 文件复制和移动
文件复制和移动是文件遍历中常见的操作。
#### 4.1.1 使用shutil模块
shutil模块提供了用于文件复制和移动的函数。
```python
import shutil
# 复制文件
shutil.copyfile('source_file.txt', 'destination_file.txt')
# 移动文件
shutil.move('source_file.txt', 'destination_file.txt')
```
#### 4.1.2 使用os模块
os模块也提供了文件复制和移动的函数。
```python
import os
# 复制文件
os.system('cp source_file.txt destination_file.txt')
# 移动文件
os.system('mv source_file.txt destination_file.txt')
```
### 4.2 文件搜索和查找
文件搜索和查找是另一个常见的应用。
#### 4.2.1 使用glob模块
glob模块提供了用于查找文件和文件夹的函数。
```python
import glob
# 查找所有.txt文件
files = glob.glob('*.txt')
```
#### 4.2.2 使用fnmatch模块
fnmatch模块提供了用于匹配文件和文件夹名称的函数。
```python
import fnmatch
# 查找所有以'file'开头的文件
files = fnmatch.filter(os.listdir(), 'file*')
```
### 4.3 文件重命名
文件重命名也是一个常见的操作。
```python
import os
# 重命名文件
os.rename('old_name.txt', 'new_name.txt')
```
### 4.4 文件删除
文件删除也是一个常见操作。
```python
import os
# 删除文件
os.remove('file.txt')
```
### 4.5 文件创建
文件创建也是一个常见操作。
```python
import os
# 创建文件
with open('new_file.txt', 'w') as f:
f.write('Hello world!')
```
### 4.6 文件读取
文件读取也是一个常见操作。
```python
import os
# 读取文件
with open('file.txt', 'r') as f:
data = f.read()
```
### 4.7 文件写入
文件写入也是一个常见操作。
```python
import os
# 写入文件
with open('file.txt', 'w') as f:
f.write('Hello world!')
```
# 5. Python文件遍历性能优化
### 5.1 避免不必要的遍历
在某些情况下,可以避免不必要的遍历操作,从而提高性能。
#### 5.1.1 使用`os.path.exists()`函数
`os.path.exists()`函数可以检查给定路径是否存在,而不进行遍历操作。这对于确定文件或文件夹是否存在很有用,从而避免不必要的遍历。
```python
import os
# 检查文件是否存在
if os.path.exists("myfile.txt"):
# 文件存在,执行操作
else:
# 文件不存在,执行其他操作
```
#### 5.1.2 使用`os.path.getsize()`函数
`os.path.getsize()`函数可以获取文件的大小,而不进行遍历操作。这对于确定文件是否为空或大小是否符合预期很有用,从而避免不必要的遍历。
```python
import os
# 检查文件是否为空
if os.path.getsize("myfile.txt") == 0:
# 文件为空,执行操作
else:
# 文件不为空,执行其他操作
```
### 5.2 并行遍历文件夹
对于大型文件夹,并行遍历可以显著提高性能。
#### 5.2.1 使用`multiprocessing`模块
`multiprocessing`模块提供了一个`Pool`类,可以创建多个进程并行执行任务。
```python
import multiprocessing
# 创建一个进程池
pool = multiprocessing.Pool()
# 获取文件夹中的所有文件
files = pool.map(os.listdir, ["文件夹1", "文件夹2", "文件夹3"])
# 关闭进程池
pool.close()
pool.join()
```
#### 5.2.2 使用`concurrent.futures`模块
`concurrent.futures`模块提供了一个`ThreadPoolExecutor`类,可以创建多个线程并行执行任务。
```python
import concurrent.futures
# 创建一个线程池
executor = concurrent.futures.ThreadPoolExecutor()
# 获取文件夹中的所有文件
files = list(executor.map(os.listdir, ["文件夹1", "文件夹2", "文件夹3"]))
```
0
0