在日常工作中,我们经常遇到需要查找特定文件的情况。如果手动一个个去查找,费时费力且效率低下,而通过Python脚本自动查找则会大大提高我们的工作效率。本文将从多个角度介绍如何使用Python查找文件夹下的文件。
一、使用os.walk()函数
os.walk()函数可以帮助我们遍历指定路径下的所有文件夹和文件。该函数返回一个三元组:(dirpath, dirnames, filenames)。其中,dirpath表示遍历到的文件夹路径,dirnames表示该文件夹下的所有子文件夹,filenames表示该文件夹下的所有文件。
下面是一个使用os.walk()函数的示例代码:
```python
import os
def search_files(path, keyword):
for dirpath, dirnames, filenames in os.walk(path):
for filename in filenames:
if keyword in filename:
print(os.path.join(dirpath, filename))
```
该函数接收两个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词。该函数会遍历path下的所有文件夹和文件,查找文件名中包含keyword的文件,并打印出它们的完整路径。
二、使用glob模块
glob模块是Python自带的一个文件查找工具。它可以根据指定的通配符匹配文件名,然后返回匹配的文件列表。通配符可以是*(匹配任意字符)、?(匹配单个字符)和[](匹配指定范围内的字符)。
下面是一个使用glob模块的示例代码:
```python
import glob
def search_files(path, keyword):
for filename in glob.glob(path + '/**/*' + keyword + '*', recursive=True):
print(filename)
```
该函数接收两个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词。该函数会在path下递归查找匹配关键词的文件,并打印出它们的完整路径。
三、使用os.listdir()函数
os.listdir()函数可以帮助我们列出指定路径下的所有文件和文件夹。该函数返回一个列表,其中包含指定路径下的所有文件和文件夹的名称。
下面是一个使用os.listdir()函数的示例代码:
```python
import os
def search_files(path, keyword):
for filename in os.listdir(path):
if keyword in filename:
print(os.path.join(path, filename))
```
该函数接收两个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词。该函数会列出path下的所有文件和文件夹,查找文件名中包含keyword的文件,并打印出它们的完整路径。
四、使用fnmatch模块
fnmatch模块是Python自带的一个文件名匹配工具。它可以根据指定的通配符匹配文件名,然后返回匹配的文件列表。通配符可以是*(匹配任意字符)、?(匹配单个字符)和[](匹配指定范围内的字符)。
下面是一个使用fnmatch模块的示例代码:
```python
import os
import fnmatch
def search_files(path, keyword):
for root, dirs, files in os.walk(path):
for filename in fnmatch.filter(files, '*' + keyword + '*'):
print(os.path.join(root, filename))
```
该函数接收两个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词。该函数会在path下递归查找匹配关键词的文件,并打印出它们的完整路径。
五、使用os.path.isfile()函数和os.path.isdir()函数
os.path.isfile()函数可以判断指定路径是否为文件,os.path.isdir()函数可以判断指定路径是否为文件夹。我们可以利用这两个函数来判断遍历到的路径是文件还是文件夹,从而实现不同的操作。
下面是一个使用os.path.isfile()函数和os.path.isdir()函数的示例代码:
```python
import os
def search_files(path, keyword):
for dirpath, dirnames, filenames in os.walk(path):
for filename in filenames:
if keyword in filename:
filepath = os.path.join(dirpath, filename)
if os.path.isfile(filepath):
print(filepath)
```
该函数接收两个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词。该函数会遍历path下的所有文件夹和文件,查找文件名中包含keyword的文件,如果该文件是一个文件而不是文件夹,则打印出它的完整路径。
六、使用递归函数
递归函数可以帮助我们在遍历文件夹时更加灵活地控制遍历的深度和方式。下面是一个使用递归函数的示例代码:
```python
import os
def search_files(path, keyword, depth=0, max_depth=-1):
for filename in os.listdir(path):
if keyword in filename:
filepath = os.path.join(path, filename)
if os.path.isfile(filepath):
print(filepath)
if os.path.isdir(filepath) and (depth < max_depth or max_depth == -1):
search_files(filepath, keyword, depth=depth+1, max_depth=max_depth)
```
该函数接收四个参数:path表示要查找的文件夹路径,keyword表示要查找的关键词,depth表示当前遍历的深度,max_depth表示最大遍历深度。该函数会列出path下的所有文件和文件夹,查找文件名中包含keyword的文件,如果该文件是一个文件而不是文件夹,则打印出它的完整路径。如果该文件是一个文件夹,且当前遍历深度小于最大遍历深度或最大遍历深度为-1,则递归调用该函数。
七、总结
以上是几种常见的Python查找文件夹下的文件的方法。使用这些方法可以大大提高我们的工作效率。在实际应用中,我们可以根据具体情况选择合适的方法,或者结合多种方法来实现更加灵活的文件查找功能。