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
相关产品推荐
相关产品推荐

