如何用Python判断文件A或B或两者均存在并执行对应逻辑?
检查文件存在性的条件语句选择
一、用if语句直接判断(常规场景)
这是最直接的方式,结合文件系统检查函数,能覆盖「仅A存在」「仅B存在」「两者都存在」三种核心场景,适合不需要处理竞态条件的普通需求。
以Python为例,可使用os.path.exists()或pathlib.Path实现:
import os file_a = "A.txt" file_b = "B.txt" # 先提前获取文件存在状态 a_exists = os.path.exists(file_a) b_exists = os.path.exists(file_b) if a_exists and not b_exists: # 仅文件A存在时执行的逻辑 print("仅A存在,执行对应操作") elif not a_exists and b_exists: # 仅文件B存在时执行的逻辑 print("仅B存在,执行对应操作") elif a_exists and b_exists: # 两者都存在时执行的逻辑 print("A和B都存在,执行对应操作") else: # 两者都不存在的兜底逻辑 print("A和B均不存在")
若使用Python 3.4+的pathlib,写法更简洁直观:
from pathlib import Path file_a = Path("A.txt") file_b = Path("B.txt") if file_a.exists() and not file_b.exists(): # 仅A存在的逻辑 pass elif file_b.exists() and not file_a.exists(): # 仅B存在的逻辑 pass elif file_a.exists() and file_b.exists(): # 两者都存在的逻辑 pass
二、用try...except处理(避免竞态条件)
如果你的需求是打开/读写文件,仅用if判断可能存在竞态条件:比如刚检查完文件存在,执行操作前文件被删除或移动。这种场景下,用try...except包裹文件操作更安全,直接捕获「文件不存在」的异常。
示例:
file_a = "A.txt" file_b = "B.txt" try: # 优先尝试操作文件A with open(file_a, 'r') as f: print("操作文件A") except FileNotFoundError: try: # A不存在时尝试操作文件B with open(file_b, 'r') as f: print("操作文件B") except FileNotFoundError: # 两者都不存在的处理逻辑 print("A和B均不存在")
若需处理「两者都存在」的场景,可结合前置判断:
from pathlib import Path file_a = Path("A.txt") file_b = Path("B.txt") if file_a.exists() and file_b.exists(): # 两者都存在时的逻辑 print("同时处理A和B") else: try: target_file = file_a if file_a.exists() else file_b with open(target_file, 'r') as f: print(f"操作文件{target_file.name}") except FileNotFoundError: print("文件已被移除,操作失败")
三、用while语句循环检查(等待场景)
while适合需要循环等待文件出现的场景,比如脚本需要等待某文件生成后再执行后续逻辑:
import os import time file_a = "A.txt" file_b = "B.txt" # 最多等待10秒,循环检查文件是否出现 timeout = 10 start_time = time.time() while time.time() - start_time < timeout: if os.path.exists(file_a) or os.path.exists(file_b): print("A或B已出现,执行后续操作") break time.sleep(1) else: print("超时,文件未出现")
内容的提问来源于stack exchange,提问作者David L
相关产品推荐
相关产品推荐

