在当日日期目录内创建子目录的Python路径问题求助
问题描述
我是Python新手,日常使用他人编写的程序从Ubuntu系统下载数据到Windows 10,该程序会自动生成以当日日期(格式%Y%m%d)命名的目录。现在我想在该日期目录内新增一个子目录,添加的代码片段如下:
#making new folder folder_n = "name of folder..." os.chdir ("C:\\data\\to_upload\\{date}") #choose directory os.mkdir (folder_n)
但运行时报错提示找不到路径,恳请帮忙解决如何正确识别该日期目录的问题。完整代码如下:
import paramiko import stat import os import pandas as pd #from tqdm.notebook import tqdm from tqdm import tqdm import logging from logging_config import getJupyterHandler logging.basicConfig(level=logging.INFO, handlers=[getJupyterHandler()]) logging.getLogger('paramiko.transport').setLevel(logging.WARNING) logging.getLogger('paramiko.transport.sftp').setLevel(logging.WARNING) import datetime import utils root = '/...path' date = None overwrite_existing = False if date is None: date = datetime.date.today().strftime("%Y%m%d") logging.info("Checking data for today") else: logging.warning("Manual date is set") sftp = utils.getPandoraSFTP(ip='...') dates = sftp.listdir(root) if date not in dates: logging.error("No folder found") else: logging.info("Folder found") files, numberOfFiles = utils.getFileListToCopy(sftp, f"{root}/{date}", f"C:\\data\\to_upload\\{date}", f"C:\\data\\to_brighter\\{date}", True) logging.info("Download tags") tags = {k:v for k,v in files.items() if 'tag/' in k} if len(tags)>0: for remote, local in tags.items(): if os.path.exists(local) == False or overwrite_existing: sftp.get(remote, local) logging.info("Create summary table") folder = os.path.dirname(list(tags.values())[0]) df = pd.DataFrame(columns=['id', 'Time', 'type' ,'Function', 'Leveling', 'Weather', 'Illumination', 'visibility', 'Road Type', 'sky', 'other', 'Issue description', 'driver', 'tester']) for file in os.listdir(folder): if file.lower().endswith('csv'): try: df = df.append(pd.read_csv(f"{folder}\\{file}", header=None, names=df.columns)) except Exception as e: logging.error(f"Unable to process tag: {file} due to {e}") df['Location'] = '' filename = folder.split('\\')[-2] summary_path = f'...' df[['Time', 'Function', 'Road Type', 'Illumination', 'Weather', 'Location', 'Issue description']].to_excel(summary_path, index=False, header=False) logging.info("Table created on ") else: logging.warning(f"No tags found") pbar = tqdm(files.items()) for remote, local in pbar: pbar.set_postfix_str(os.path.basename(remote)) if os.path.exists(local) == False or overwrite_existing: sftp.get(remote, local) #making new folder folder_n = "name of folder..." os.chdir ("C:\\data\\to_upload\\{date}") #choose directory os.mkdir (folder_n)
解决方案
核心问题是字符串未正确格式化:代码里的"{date}"是字面量字符串,Python不会自动替换为变量date的值,导致路径变成C:\data\to_upload\{date},系统自然找不到这个目录。
同时,直接使用os.chdir切换目录不是最优做法,推荐直接构造完整路径进行操作,避免工作目录变化引发的潜在问题。
修改后的代码片段如下:
# making new folder folder_n = "name of folder..." # 构造日期目录的完整路径(用f-string替换变量date) date_directory = f"C:\\data\\to_upload\\{date}" # 确保日期目录存在(避免下载环节异常导致目录未创建) os.makedirs(date_directory, exist_ok=True) # 用os.path.join拼接子目录路径(跨平台更安全) sub_directory_path = os.path.join(date_directory, folder_n) # 创建子目录,exist_ok=True避免目录已存在时报错 os.makedirs(sub_directory_path, exist_ok=True)
关键修改说明:
- f-string格式化路径:
f"C:\\data\\to_upload\\{date}"会将变量date的实际值(如20240520)替换到路径中,生成正确的目标目录路径。 os.path.join拼接路径:这是Python推荐的跨平台路径拼接方式,自动适配Windows的\\和Linux的/,避免手动写分隔符出错。os.makedirs带exist_ok=True:既可以创建多级目录,又能在目录已存在时不报错,增强代码的鲁棒性。- 避免
os.chdir:直接操作完整路径,无需切换当前工作目录,减少因工作目录变化导致的其他路径问题。
内容的提问来源于stack exchange,提问作者Manonthemoon
相关产品推荐
相关产品推荐

