python 列举文件夹下文件并排序

本文介绍了一种在Python中如何按数字顺序对文件列表进行排序的方法。通过使用os模块的listdir函数获取文件夹内所有文件名,并利用列表的sort方法结合lambda函数实现自定义排序。适用于文件名以数字命名的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要列举当前文件夹下的文件,可以用下面的方法:

<span style="font-size:12px;">import os
a=os.listdir('.\')</span>
得到的a是一个列表,里面的元素就是文件夹下每个文件的名字;但是它并不是按我们在文件夹中看到的文件的顺序排列的,而是一种不固定的顺序。

假如我们的文件夹中是后缀名为.jpg的图片,并且按照数字大小来命名,那么我们可以使用列表的sort()方法来对其进行排序,但是它是按string的排序方法排序的。

如果我们想要让它按数字大小来排序,那么我们可以使用sort()的key参数,key参数是一个函数,比如我们想按列表的元素的长度排序,我们可以使用

list.sort(key=len)
如果想按字母排序(不是按ascii码),可以用

list.sort(key = str.lower)
回到我们的问题,想让列表按数字大小排序,可以使用lambda函数:

a.sort(key= lambda x:int(x[:-4]))
-4是索引到文件名的倒数第四个字符,也就是'.'符号。



### 批量读取文件夹内所有文件名的方法 在多种编程语言中,都可以通过特定的库或API实现批量读取文件夹内的所有文件名。以下是几种常见编程语言的具体实现方式。 #### C++ 实现 C++ 可以利用 Windows API 或标准库 `filesystem` 来完成此操作。如果目标平台为 Windows,则可以通过调用 `_findfirst` 和 `_findnext` 函数来遍历文件夹中的文件[^1]。另一种更现代的方式是使用 C++17 中引入的标准库 `<filesystem>`,它提供了跨平台的支持: ```cpp #include <iostream> #include <filesystem> namespace fs = std::filesystem; void listFiles(const std::string& path) { try { for (const auto & entry : fs::directory_iterator(path)) { if (entry.is_regular_file()) { // 判断是否为常规文件 std::cout << entry.path() << "\n"; // 输出文件路径 } } } catch (std::exception& e) { std::cerr << "Error: " << e.what() << '\n'; } } int main() { std::string folderPath = "./example_folder"; listFiles(folderPath); return 0; } ``` 该代码片段展示了如何使用 C++ 的 `<filesystem>` 库来列举指定文件夹下的所有文件[^3]。 --- #### C 实现 对于 C 语言而言,可以借助 POSIX 提供的函数接口(如 `opendir()`、`readdir()`),或者在 Windows 平台上使用 `_findfirst` 和 `_findnext` 函数。下面是一个基于 POSIX 接口的例子: ```c #include <stdio.h> #include <dirent.h> void listFiles(const char* dirName) { DIR *dir = opendir(dirName); // 打开目录 if (!dir) { perror("无法打开目录"); return; } struct dirent *entry; while ((entry = readdir(dir)) != NULL) { // 遍历目录条目 printf("%s\n", entry->d_name); // 输出文件/子目录名称 } closedir(dir); // 关闭目录句柄 } int main() { const char* folderPath = "./example_folder"; listFiles(folderPath); return 0; } ``` 此外,在获取到文件列表之后,还可以按照需求对其进行排序处理,例如采用冒泡排序或其他算法[^2]。 --- #### Python 实现 Python 是一种简单易用的语言,其内置模块 `os` 和第三方库 `pathlib` 均可轻松完成此类任务。以下是一段示例代码: ```python import os def list_files(directory_path): files_list = [] for root, dirs, files in os.walk(directory_path): # 遍历目录及其子目录 for file in files: full_path = os.path.join(root, file) # 获取完整路径 files_list.append(full_path) return files_list if __name__ == "__main__": directory = './example_folder' all_files = list_files(directory) for f in all_files: print(f) ``` 这段代码不仅列出了当前文件夹中的文件,还支持递归访问子文件夹打印其中的内容[^5]。 --- #### VBA 实现 VBA 脚本通常用于 Microsoft Office 环境下自动化办公流程。要提取某文件夹下的所有文件名至 Excel 表格中,可以用以下脚本: ```vba Sub ListAllFiles() Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim iRow As Integer Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(ThisWorkbook.Path & "/example_folder") ' 修改为目标文件夹路径 iRow = 1 For Each objFile In objFolder.Files Cells(iRow, 1).Value = objFile.Name ' 文件名 Cells(iRow, 2).Value = objFile.Path ' 完整路径 iRow = iRow + 1 Next objFile MsgBox ("已完成!共找到 " & iRow - 1 & " 个文件.") End Sub ``` 以上代码会将目标文件夹中的所有文件名以及它们对应的绝对路径记录下来,显示在一个弹窗消息框中[^4]。 --- #### 总结 不同语言有不同的工具集和语法风格,但核心逻辑基本一致——即枚举给定路径下的每一个项目,判断它是文件还是子目录。最终选择哪种技术取决于具体的应用环境和个人偏好。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值