You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在当日日期目录内创建子目录的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)

关键修改说明:

  1. f-string格式化路径:f"C:\\data\\to_upload\\{date}"会将变量date的实际值(如20240520)替换到路径中,生成正确的目标目录路径。
  2. os.path.join拼接路径:这是Python推荐的跨平台路径拼接方式,自动适配Windows的\\和Linux的/,避免手动写分隔符出错。
  3. os.makedirs带exist_ok=True:既可以创建多级目录,又能在目录已存在时不报错,增强代码的鲁棒性。
  4. 避免os.chdir:直接操作完整路径,无需切换当前工作目录,减少因工作目录变化导致的其他路径问题。

内容的提问来源于stack exchange,提问作者Manonthemoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:45:37