Python读取目录txt文件报FileNotFoundError但文件实际存在如何解决
问题原因
根本原因
os.listdir()仅返回目标目录下的文件名/目录名,不包含父级路径信息。你在第二个脚本中直接将获取到的文件名file传入open()函数时,Python会以脚本执行时的当前工作目录为基准查找文件,只要你运行脚本时的工作目录不是你定义的C:\Users\Username\OneDrive\Desktop\python,就会出现文件存在但找不到的报错。- 你删除txt文件后脚本无报错退出,是因为
if file.endswith(".txt")判断不通过,不会执行后续的open()逻辑,自然不会触发报错,这个表现和问题原因完全吻合。
另外你现有代码里还有个隐性语法问题:char_list列表中'PDU A4''a'位置漏了逗号,会被Python识别为字符串拼接,后续匹配规则会出错。
解决方法
读取文件时和你第一个PDF转换脚本的逻辑保持一致,拼接完整的文件路径再打开即可,修改后代码如下:
import os import time #import sys import mysql.connector from collections import deque from itertools import groupby directory = 'C:\\Users\\Username\\OneDrive\\Desktop\\python' for file in os.listdir(directory): if file.endswith(".txt"): #Skip non-TXT files # 拼接完整路径再打开 with open(os.path.join(directory, file), 'r') as f: nameList = [line.strip() for line in f] transferlist = nameList char_list=['UPS A','PDU A1','PDU B1','CRAC 03','PDU A2','CRAC 05','UPS B', 'PDU B2','CRAC 06','CRAC 07','PDU A4','DC CNC','ATS 1','ATS 2','CRAC 02','CRAC 04','CRAC 01', 'CRAC 09','CRAC 08','CRAC 10','CRAC 11','ATS','DC A1','DC B1','PDU A4','a','b','c','d','e', 'f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','/',':'] transferlist2=[ele for ele in transferlist if all(ch not in ele for ch in char_list)]
可选优化建议
- 所有文件操作统一使用
os.path.join()拼接路径,避免手动拼接字符串时出现斜杠遗漏、写错的问题,你第一个脚本里写txt文件的逻辑也可以替换为这种写法,兼容性更好。 - 如果需要排查路径问题,可以在打开文件前打印完整路径确认:
print("当前处理文件路径:", os.path.join(directory, file))
内容的提问来源于stack exchange,提问作者FuzzyButt Gaming
相关产品推荐
相关产品推荐

