要直接切入主题,今儿个我就要引领着你,一步一步地将Python当中文件夹路径的循环遍历稳稳拿下,关键核心存在着两个堪称神器的东西:os.path.join()以及 f-string。

不少刚开始接触的新手,一旦遇到路径拼接的情况,就会感到头疼,反斜杠与正斜杠分辨不清,在进行字符串相加操作时,会出现各种各样的报错现象。

别慌,我带你把这块硬骨头啃下来。

先看一个最简可运行 demo,让你立刻有感觉:

# 运行环境:Python 3.8+,无需额外安装依赖
import os
# 当前目录下的 test 文件夹路径
folder_path = './test'
# 小白版:最基础的遍历+拼接
# 入参:folder_path 文件夹路径,出参:打印每个文件的完整路径
try:
# os.listdir()获取文件夹下所有文件名
for filename in os.listdir(folder_path):
# os.path.join()自动处理操作系统差异(Windows 用,Mac/Linux 用/)
full_path = os.path.join(folder_path, filename)
print(full_path)
except FileNotFoundError:
print(f'报错啦!找不到文件夹:{folder_path},检查下路径对不对')

运行效果

./test/test_result_1.txt
./test/test_result_2.txt
./test/test_result_3.txt
./test/test_result_4.txt

一行一行地给你透彻讲解,os.listdir() 如同去翻抽屉那般,将 test 文件夹之中所有物品的名称罗列出来

有个名为 os.path.join()的东西,它宛如那种特别温和善良的人,会理所当然地主动帮助你去添加恰当合适的斜杠。

我所带领过的学员当中,起码有一半之人在这儿遭遇了问题:自行进行使用,并且拼接路径,在 Windows 系统上汇报错误称找寻不到文件。

Pythonos.path.join 路径拼接 _ 使用 os.path.join 函数遍历路径 _python 中遍历文件夹路径

记住,永远用os.path.join(),别自己拼

企业级实战:f-string 让代码更优雅

项目里咱们不能光打印,得真干活。

下面这个版本添加了异常捕获,进行了并且边界判断,f - string 拼接路径相较于 os.path.join()更为直观:

import os
cnt = 1   #第一个 txt 文件的末尾为 1,所以设置 cnt 为 1
TEMP = []
for i in range(0,4):   #这里循环 4 次,因为文件夹中有 4 个 txt 文件
    temp_name = "test_result_" + str(cnt) + ".txt"
    cnt = cnt + 1
    prexfix_path = "/test/"  #这里是指所在文件夹的路径,
    txt_path = os.path.join(prexfix_path, temp_name)
    #下面将 txt_path 输入到需要的函数中,假设本例中是 txt_read()函数的参数是 txt 文件路径
    # run()函数返回的结果保存到 result 中
    result = txt_read(txt_path)
    #将每次的结果 result 添加到 TEMP 中, 从而可以使得
    TEMP.append(result)
print(TEMP)

# 运行环境:Python 3.8+,依赖:无
import os
def batch_process_txt(folder_path='./test'):
"""
批量处理 test 文件夹下所有 txt 文件
入参:folder_path - 文件夹路径,默认'./test'
出参:返回处理后的文件内容字典
"""
# 边界条件:检查文件夹是否存在
if not os.path.exists(folder_path):
raise FileNotFoundError(f'文件夹不存在:{folder_path}')
# 边界条件:检查是否为文件夹
if not os.path.isdir(folder_path):
raise NotADirectoryError(f'{folder_path}不是文件夹')
results = {}
try:
# 只处理.txt 文件,过滤掉其他乱七八糟的
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
# 重点来了!
f-string 直接嵌入变量,比 format 简洁太多
# 传统写法:'{}/{}'.format(folder_path, filename)
# f-string 写法:一目了然
file_path = f'{folder_path}/{filename}'
# 打开文件读取内容
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read().strip()
results[filename] = content
print(f'✅ 已处理:{filename}')
except PermissionError:
print(f'❌ 权限不足,无法读取{folder_path}下的文件')
except Exception as e:
print(f'❌ 未知错误:{e}')
return results
# 调用示例
if __name__ == '__main__':
data = batch_process_txt()
print(f'n 总共处理了{len(data)}个文件')

带上学员去踩过的实实在在的坑:存在这样一个学员,运用 f-string 去写 f“test/{filename}.txt” ,进而导致路径当中多出来了一个点,怎么找都无论如何找不到那个所需要的文件。

Pythonos.path.join 路径拼接 _python 中遍历文件夹路径 _ 使用 os.path.join 函数遍历路径

避坑口诀:用 f-string 拼接前,先打印变量看看长啥样

f-string 背后的原理:为什么比 format 香

temp = "test_result_1"
PATH = f"test/{temp}.txt"
print(PATH)
# 输出:test/test_result_1.txt

str.format()时代咱们这么写:

# 参数少还行,多了眼睛花
path = 'test/{}_{}.txt'.format(name, index)

f 字符串的本质,乃是编译时进行的优化,变量是直接被内嵌进去 的,其运行速度会更快。

更关键的是,f-string 里面可以写简单表达式

for i in range(1, 5):
# 直接在花括号里做运算,爽不爽?
file_path = f'./test/test_result_{i}.txt'
print(file_path)

再来一个实实在在的坑:存在学员于 f-string 当中使用中文引号,呈现为 f“test/{i}.txt”这种形式,结果直接就报出语法错误来了。

name = "xiaoming"
age = 18
print("hi, i am {}. i am {}".format(name, age))
# 输出: hi, i am xiaoming. i am 18

记好了,f - string 外部运用双引号,其内部变量采用花括号,千万不要搞混使用中文标点符号。

终极对比:os.path.join() vs f-string 怎么选?

场景 推荐方案 原因
跨平台部署(Windows/Linux) os.path.join() 自动处理斜杠差异
纯 Linux/Mac 环境 f-string 代码更短,性能更好
路径+文件名+扩展名动态拼接 os.path.join() 避免多拼或少拼斜杠
简单文件名遍历 f-string 一眼看懂,省事

name = "xiaoming"
age = 18
print(f"hi, i am {name}. i am {age}")
# 输出: hi, i am xiaoming. i am 18

关于我的实战方面给出的建议是,要是去写工具库的话,那就采用 os.path.join()这种方式来保障兼容性,而要是写脚本的话,那就自己运用 f-string 这种方式来提升效率。

今儿就着手练习:将 test 文件夹转变为 data/results 这种多级目录,运用两种不同的方法各自展开遍历,瞧瞧哪一种所出现的报错数量更少。