You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历相对路径下.txt文件时如何正确显示各文件名

问题原因

你代码的问题出在count_words函数的输出逻辑上:你没有使用调用时传入的具体文件路径参数filename,反而固定读取了全局变量path_str的文件名部分。path_str本身是带通配符的Chapter 10_Files_Exceptions/*.txt,提取到的文件名自然就是*.txt,所以所有输出的文件名都是固定的通配符。

修复方案

将函数中两处os.path.basename(path_str)替换为os.path.basename(filename)即可,修改后代码如下:

import os

def count_words(filename):
    """统计文件的近似单词数量"""
    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()
    except FileNotFoundError:
        print(f"{os.path.basename(filename).capitalize()} 不存在于当前工作目录")
    else:
        words = contents.split()
        num_words = len(words)
        print(f"{os.path.basename(filename).capitalize()} 包含 {num_words} 个单词")

filenames = ['Chapter 10_Files_Exceptions/alice.txt', 'Chapter 10_Files_Exceptions/siddhartha.txt', 
            'Chapter 10_Files_Exceptions/moby_dick.txt', 'Chapter 10_Files_Exceptions/little_women.txt'
            ]

for filename in filenames:
    count_words(filename)

补充优化

如果你不想手动维护filenames列表,可以用glob模块配合你一开始定义的通配符路径,自动匹配目录下所有txt文件,无需手动录入文件名:

import os
import glob

path_str = "Chapter 10_Files_Exceptions/*.txt"
# 自动匹配所有符合规则的txt文件路径
filenames = glob.glob(path_str)

def count_words(filename):
    """统计文件的近似单词数量"""
    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()
    except FileNotFoundError:
        print(f"{os.path.basename(filename).capitalize()} 不存在于当前工作目录")
    else:
        words = contents.split()
        num_words = len(words)
        print(f"{os.path.basename(filename).capitalize()} 包含 {num_words} 个单词")

for filename in filenames:
    count_words(filename)

内容的提问来源于stack exchange,提问作者Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:09:02