Python中for循环读取txt文件存列表仅返回空字符串如何解决
问题原因
- 路径拼接不兼容系统:直接使用
/硬编码拼接路径,在Windows系统下会生成无效路径,导致glob.glob()没有匹配到任何.txt文件,text_files为空列表,后续for循环没有执行,最终lista自然是空列表。 - 文件编码不匹配:
open()函数使用系统默认编码读取文件,如果目标txt文件的编码和默认编码不一致,会出现读取内容为空的情况,且不会主动抛出异常。 - 目标目录无有效txt文件:你选择的目录下实际不存在
.txt后缀的文件,导致匹配结果为空。
修复方案
修正后的代码如下:
import glob import os from tkinter.filedialog import askdirectory data_directory = askdirectory(initialdir='/Users/vinicius/Desktop/Assignment 3 - CISC 121/Documents_1') # 用os.path.join拼接路径,兼容不同操作系统的分隔符 text_files = glob.glob(os.path.join(data_directory, "*.txt")) data_directory_stop = '/Users/vinicius/PycharmProjects/Assignment_2/StopWords.txt' # 新增匹配结果判断,方便排查 if not text_files: print(f"当前选中目录{data_directory}下未找到任何txt文件") else: print(f"匹配到{len(text_files)}个txt文件:{text_files}") stop_word = [] with open(data_directory_stop, 'r', encoding='utf-8') as stop: for x in stop: x = x.strip('\n') stop_word.append(x) print(stop_word) lista = [] for x in text_files: # 读取文件时指定编码,避免编码不匹配导致读取异常 with open(x, 'r', encoding='utf-8') as text: lista.append(text.read()) print(lista) print(text_files) print(data_directory)
核心修改点
- 引入
os模块,使用os.path.join()拼接路径,自动适配不同操作系统的路径分隔符规则,解决硬编码路径分隔符导致的匹配失败问题。 open()函数新增encoding='utf-8'参数,若你使用的txt文件为其他编码(如GBK),替换对应编码值即可。- 新增匹配结果判断逻辑,匹配不到文件时主动输出提示,方便快速定位问题。
内容的提问来源于stack exchange,提问作者V2P
相关产品推荐
相关产品推荐

