如何将生成的YAML文件保存至当前工作目录或相对路径?
问题:修改YAML生成路径至当前目录或指定相对路径
用户提供的生成YAML的代码如下:
with open(f'/tmp/{source}-fields.csv') as csv_file: reader = csv.reader(csv_file) with open(f'/tmp/{source}.yml', 'w') as yaml_file: yaml_file.write("namespace:\n") yaml_file.write(f" {source}:\n") yaml_file.write(f" description: {source_desc}\n") yaml_file.write(f" fields:\n") for row in reader: yaml_file.write(" {}:\n".format(row[0])) if "'" in row[1]: yaml_file.write(' description: "{}"\n'.format(row[1])) else: yaml_file.write(" description: '{}'\n".format(row[1])) yaml_file.write(" type: '{}'\n".format(row[2])) yaml_file.write("\nBook: {}\n") yaml_file.write("\nMarket: {}\n") yaml_file.write("\nDataset: {}\n")
需求是将生成的YAML文件保存到当前目录或指定相对路径,并询问是否只需在第二个with open()中用os.path.join()拼接文件名和目标路径。
解决方案
你的思路是对的,通过os.path.join()可以灵活拼接路径和文件名,同时补充以下关键细节即可实现需求:
1. 核心修改步骤
- 导入
os模块:用于路径拼接和目录创建 - 定义目标路径:支持当前目录或自定义相对路径
- 用
os.path.join()拼接最终文件路径:自动适配不同系统的路径分隔符 - 可选:确保目标目录存在,避免路径不存在导致的写入失败
2. 修改后的完整代码示例
import os import csv # 定义目标路径:当前目录用".",指定相对路径比如"./output" target_dir = "." # 确保目标目录存在,不存在则自动创建(exist_ok=True避免已存在时报错) os.makedirs(target_dir, exist_ok=True) with open(f'/tmp/{source}-fields.csv') as csv_file: reader = csv.reader(csv_file) # 拼接最终的YAML文件路径 yaml_file_path = os.path.join(target_dir, f"{source}.yml") with open(yaml_file_path, 'w') as yaml_file: yaml_file.write("namespace:\n") yaml_file.write(f" {source}:\n") yaml_file.write(f" description: {source_desc}\n") yaml_file.write(f" fields:\n") for row in reader: yaml_file.write(" {}:\n".format(row[0])) if "'" in row[1]: yaml_file.write(' description: "{}"\n'.format(row[1])) else: yaml_file.write(" description: '{}'\n".format(row[1])) yaml_file.write(" type: '{}'\n".format(row[2])) yaml_file.write("\nBook: {}\n") yaml_file.write("\nMarket: {}\n") yaml_file.write("\nDataset: {}\n")
3. 关键说明
- 若只需保存到当前目录,直接用
f"{source}.yml"作为open()的参数即可,无需os.path.join() os.path.join()会自动根据操作系统选择路径分隔符(Windows用\,Linux/macOS用/),避免手动拼接的兼容性问题os.makedirs(target_dir, exist_ok=True)是可选但推荐的操作,确保指定的相对路径不存在时会自动创建
内容的提问来源于stack exchange,提问作者user19667022
相关产品推荐
相关产品推荐

