python当前目录下的文件_Python列出当前文件夹下文件的两种方法

本文介绍了Python中使用os模块的listdir()和walk()方法来扫描并列出当前目录下的文件和文件夹。os.listdir()返回指定目录的文件和文件夹列表,而os.walk()不仅列出文件和文件夹,还能递归遍历子目录。文中提供了示例代码进行详细说明。

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

使用Python做一些自动化操作时,经常与文件夹和文件打交道,这就依赖于OS模块了。

OS是Operate System的缩写,是Python标准库中一个用于访问操作系统功能的模块,OS模块中的接口可以跨平台、跨系统访问。

OS模块功能很强大,能够做很多事,举个栗子吧:

获取平台信息,判断操作系统

对目录操作

判断操作

有时候我们需要扫码某个文件夹下的文件,然后根据扩展名自动载入对应文件,比如批量读取所有Excel文件,处理Excel里面的数据。下面就介绍两个方法,如何对文件夹/文件进行扫描。

os.listdir()

os.listdir()方法语法格式如下:

os.listdir(path)

该方法用于返回指定的文件夹path包含的文件或文件夹的名字的列表,在Unix系统下不会包含 . 和 ..,并且不会遍历列出子文件夹下的文件和文件夹。

如果你想列出当前Python文件所在目录下的所有文件和文件夹,再告诉你一个很有用的方法:os.getcwd()

当然我们还可以对文件夹和文件进行过滤,下面以代码作为演示:

import os

current_dir = os.getcwd()

for f in os.listdir(current_dir):

# 返回当前绝对路径,使用os.path.join()方法可以不用考虑路径分隔符

absolute_path = os.path.join(path, f)

# 如果是文件

if os.path.isfile(absolute_path):

print("这是文件: ", absolute_path)

elif os.path.isdir(absolute_path):

print("这是文件夹:", absolute_path)

使用os.path.join()可以完美解决不同平台路径的分隔符问题,再也不怕搞错路径啦。

我们知道,Windows系统路径分隔符是"\\", Linux类系统如Ubuntu的分隔符是"/"。如果你是一个善于动手的好孩子,可以手动添加分隔符,os.sep可以返回当前平台的路径分隔符。

os.walk()

如果你搜索Python列出当前文件夹下相关文章,大多数看到的都是介绍os.walk()方法,如果我一开始介绍这个方法,你的小手已经点向了小红叉。

walk()方法语法格式如下:

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])

top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

root 所指的是当前正在遍历的这个文件夹的本身的地址

dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)

files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。

onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。

followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

敲重点,os.walk()会进行遍历,不管你的文件目录藏的有多深,也逃不过它的五指山,这是与os.list()不同点之一。

下面以一个例子演示os.walk()方法

import os

current_path = os.getcwd()

for root, dirs, files in os.walk(current_path, topdown=False):

for name in files:

print(os.path.join(root, name))

for name in dirs:

print(os.path.join(root, name))

<think>嗯,用户想用Python列出一个目录下的文件,但需要忽略子文件夹。好的,我得想想怎么做。首先,我需要确定用户的需求:他们可能有一个目录,里面既有文件也有子目录,他们只想要获取文件列表,而不包含任何文件夹。这很常见,比如在处理批量文件时,避免误操作子目录。 那Python中怎么实现呢?我记得os模块里有方法可以列出目录内容。os.listdir()可以列出目录下的所有条目,包括文件文件夹。但这样得到的是一个混合列表,需要进一步筛选。这时候可能需要用到os.path模块来判断每个条目是文件还是目录。 比如,遍历os.listdir()返回的列表,对每个条目使用os.path.isfile()来判断是否是文件。如果是,就保留,否则跳过。这样就能过滤出所有文件了。不过要注意路径拼接的问题,因为os.listdir()返回的是条目名称,不是绝对路径,所以可能需要用os.path.join()来组合目录路径和条目名,才能正确判断。 或者,有没有更简洁的方法?比如用列表推导式,结合os.path.isfile()。比如: files = [f for f in os.listdir('.') if os.path.isfile(os.path.join('.', f))] 这样应该可以得到当前目录下所有文件列表。不过用户可能需要指定不同的目录,所以应该提示他们替换路径。 另外,有没有其他方法?比如使用os.scandir(),这在Python 3.5之后引入,可能更高效。因为os.scandir()返回的是DirEntry对象,这些对象有is_file()方法,不需要每次调用os.path.isfile(),可能性能更好。例如: with os.scandir('.') as entries: files = [entry.name for entry in entries if entry.is_file()] 这种方法可能更快,特别是处理大量文件时。不过需要注意版本兼容性,如果用户用的是旧版本Python可能不支持。 还有,glob模块也可能有用,比如用glob.glob('*'),然后筛选出文件。不过同样需要判断是否为文件。 总结的话,用户需要两种方法:os.listdir配合os.path.isfile,或者os.scandir。可能需要给出这两种方法的示例代码,并说明它们的区别和适用情况。同时提醒路径拼接的重要性,避免因为相对路径导致的判断错误。 另外,要考虑到跨平台的情况,比如路径分隔符的问题,但os.path.join已经处理了,所以应该没问题。最后,确保示例代码的正确性,比如正确导入os模块,路径是否正确等。</think>在Python中仅列出目录下的文件(忽略子文件夹)有以下两种常用方法: **方法一:使用os.listdir() + os.path.isfile()** ```python import os dir_path = './your_directory' # 替换为你的目录路径 # 筛选出所有文件(过滤掉文件夹) file_list = [f for f in os.listdir(dir_path) if os.path.isfile(os.path.join(dir_path, f))] print(file_list) ``` **方法二:使用os.scandir()(更高效)** ```python import os dir_path = './your_directory' # 替换为你的目录路径 with os.scandir(dir_path) as entries: file_list = [entry.name for entry in entries if entry.is_file()] print(file_list) ``` **关键点说明**: 1. `os.path.join()` 用于构建完整路径,避免路径拼接错误 2. `os.scandir()` 方法性能更优(推荐用于Python 3.5+) 3. 两种方法都会返回包含文件名的列表,例如:`['file1.txt', 'image.jpg', 'data.csv']` **典型应用场景**: - 批量文件处理(重命名/格式转换等) - 文件分类统计 - 自动化文件管理系统开发 **注意事项**: 1. 需要确保目录路径存在(可使用`os.path.exists()`验证) 2. 符号链接文件会被识别为文件,如需过滤可用`entry.is_file(follow_symlinks=False)` 3. 隐藏文件(以`.`开头的文件)也会被包含在结果中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值