Python获取指定路径下的某类型文件的所有文件名

本文介绍如何使用Python编写脚本,从指定路径中提取特定类型(如.lib)的文件名。通过调整规则,可以筛选出特定条件(如debug版本)的文件,并将结果保存到txt文件中。

最近刚接触Python。考虑到之前在vs2010编写C++程序时,要使用第三方库的时候经常需要指定输入依赖项,比如OpenCV,我经常习惯把lib文件夹下的所有lib文件都添加到工程中,这时候就非常希望能够把路径下的所有lib文件的文件名提取出来。

所以用Python写了一个小程序来实现这个功能。

import sys
import glob
import os
if len(sys.argv) < 3 :
	print 'usage: filenmae.py dir suffix'
	exit()
dir = sys.argv[1]
suffix = sys.argv[2]
f = glob.glob(dir + '\\*.' + suffix)
fileout = open(dir + '\\' + suffix + '.txt','wt')
for file in f :
	filename = os.path.basename(file)
	print filename
	fileout.write(filename)
	fileout.write('\n')
fileout.close()

glob是python的一个简单模块,用它可以查找符合特定规则的文件路径名。然后利用os模块中的basename方法来分离出文件名即可。 上述脚本的运行方法如下:

<think>我们被要求获取指定路径下的所有文件(不区分类型),而不仅仅是特定类型文件。根据引用[1]和[2],我们可以使用os.walk来遍历目录,然后收集所有文件(不需要过滤扩展名)。 同时,引用[3]也提到了获取指定路径下的所有文件名的方法,但它是针对特定类型的,我们可以去掉类型过滤部分。 因此,我们可以编写一个函数,使用os.walk遍历给定目录,并将所有文件的完整路径收集到一个列表中。 注意:我们不需要过滤文件类型,所以去掉endswith判断。 另外,引用[2]提到了获取文件夹下所有文件路径的方法,我们可以参考。 步骤: 1. 导入os模块 2. 定义一个函数,比如get_all_files(dir_path),用于获取指定目录下的所有文件(包括子目录中的文件) 3. 使用os.walk遍历目录,对于每个遍历到的文件,将其完整路径(使用os.path.join(root, file))添加到列表中 4. 返回文件列表 另外,我们也可以考虑提供一个选项,是否包含子目录。默认情况下,我们包括子目录。 如果用户只需要当前目录(不包括子目录),我们可以使用os.listdir,然后过滤出文件(排除目录)。但根据问题,要求是指定路径下的所有文件,通常包括子目录。所以这里我们按照包括子目录来实现。 我们也可以提供两种方式,但问题没有特别说明,我们先实现包括子目录的。 如果用户需要不包含子目录,我们可以另外提供一个函数或使用参数控制。但根据问题,我们先实现获取所有文件(包括子目录)。 代码示例: 根据引用[1]中的代码,我们去掉文件类型判断即可。 另外,引用[2]中可能提到的方法也类似。 因此,我们编写如下代码: </think> # Python获取指定路径下所有文件的方法 在Python获取指定路径下的所有文件(包括子目录)是一个常见需求,下面我将介绍几种高效实现方法: ## 方法1:使用os.walk递归遍历(最常用) ```python import os def get_all_files(directory): """获取指定目录下所有文件的完整路径列表""" file_list = [] for root, dirs, files in os.walk(directory): for file in files: # 拼接文件的完整路径 file_path = os.path.join(root, file) file_list.append(file_path) return file_list # 示例用法 path = "D:/projects" # 替换为你的目标路径 all_files = get_all_files(path) print(f"找到 {len(all_files)} 个文件:") for file in all_files: print(file) ``` ### 方法特点: - **递归遍历所有子目录** - 返回每个文件的完整路径 - 包含隐藏文件(以`.`开头的文件) - 不会返回目录本身,只返回文件 ## 方法2:使用os.listdir(仅当前目录) ```python import os def get_files_in_directory(directory): """获取当前目录下所有文件(不包含子目录)""" file_list = [] for item in os.listdir(directory): item_path = os.path.join(directory, item) if os.path.isfile(item_path): # 确保是文件而不是目录 file_list.append(item_path) return file_list # 示例用法 path = "D:/projects" current_files = get_files_in_directory(path) ``` ### 方法特点: - **只获取当前目录下的文件**(不包含子目录) - 更轻量级,适用于不需要递归的场景 - 同样包含隐藏文件 ## 方法3:使用pathlib(Python 3.4+) ```python from pathlib import Path def get_all_files_pathlib(directory): """使用pathlib获取所有文件路径""" path = Path(directory) # 使用rglob('*')递归匹配所有文件 return [str(file) for file in path.rglob('*') if file.is_file()] # 示例用法 path = "D:/projects" files = get_all_files_pathlib(path) ``` ### 方法特点: - **面向对象**,路径操作更直观 - 自动处理不同操作系统的路径分隔符 - 方法链式调用更简洁 ## 方法4:使用glob递归匹配 ```python import glob def get_all_files_glob(directory): """使用glob库递归获取所有文件""" # 双星号(**)表示递归所有子目录 return glob.glob(f"{directory}/**/*", recursive=True) # 示例用法 path = "D:/projects" files = get_all_files_glob(path) ``` ### 方法特点: - **语法简洁**,类似命令行通配符 - 支持模式匹配(如`*.txt`获取所有文本文件) - `recursive=True`启用递归搜索 ## 性能比较 | 方法 | 递归支持 | 易用性 | 功能丰富性 | 适用场景 | |------|----------|--------|------------|----------| | os.walk | ✔️ | ★★★★ | ★★★★ | 需要详细文件信息 | | os.listdir | ❌ | ★★★★ | ★★ | 仅当前目录文件 | | pathlib | ✔️ | ★★★★★ | ★★★★ | 现代Python项目 | | glob | ✔️ | ★★★★★ | ★★★ | 简单模式匹配 | > **提示**:如果只需要文件名而不需要完整路径,可修改代码为`file_list.append(file)`而不是`file_list.append(os.path.join(root, file))`[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值