如何在Python中跨目录创建文件夹并保存处理后的数据文件
如何在跨目录场景下创建文件夹并保存处理后的数据文件?
问题描述
我当前的目录结构如下:
my_dir |__data | | light_colors.csv |__code |__data_reader.py
我想要在data目录下创建processed子目录,用来存放data_reader.py的处理输出,最终期望的目录结构是:
my_dir |__data | |__processed | | | light_colors_processed.csv | | | light_colors.csv |__code |__data_reader.py
我知道如果data目录在code目录下时的实现方式,比如用这段代码:
tobeparsed.save_file('data/processed/' + file_to_be_parsed.split('.')[0] + '_processed.csv') return tobeparsed if __name__ == '__main__': if 'processed' not in os.listdir('data/'): os.mkdir('data//processed') parsing('data/light_colors.csv')
但现在需要处理跨目录的场景,不清楚该怎么创建文件夹并保存处理后的文件,求指点。
解决方案
针对跨目录的路径处理,最稳妥的方式是基于脚本自身的位置构建路径,这样无论你从哪个目录运行脚本,都不会出现路径错误。下面分两种常见场景给出实现:
场景1:data_reader.py 位于 my_dir 根目录(和 data、code 同级)
这种情况用相对路径即可直接处理,推荐用更安全的路径拼接方式:
import os def parsing(file_path): # 这里替换成你的实际数据处理逻辑,生成 tobeparsed 对象 tobeparsed = ... # 拆分文件名,构建处理后的文件名 file_name = os.path.basename(file_path) file_base_name = os.path.splitext(file_name)[0] save_file_name = f"{file_base_name}_processed.csv" # 构建保存目录和完整文件路径 save_dir = os.path.join("data", "processed") save_full_path = os.path.join(save_dir, save_file_name) # 创建目录(不存在则创建,已存在不会报错) os.makedirs(save_dir, exist_ok=True) # 保存处理后的文件 tobeparsed.save_file(save_full_path) return tobeparsed if __name__ == '__main__': # 调用处理函数,传入输入文件的相对路径 parsing("data/light_colors.csv")
场景2:data_reader.py 位于 code 目录下(跨目录访问 data)
如果脚本放在code目录里,需要先定位到my_dir根目录,再构建目标路径:
import os def parsing(file_path): # 替换成你的实际数据处理逻辑 tobeparsed = ... # 获取脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 向上追溯到 my_dir 根目录(code 的上级目录) root_dir = os.path.dirname(script_dir) # 构建保存目录和文件路径 file_name = os.path.basename(file_path) file_base_name = os.path.splitext(file_name)[0] save_dir = os.path.join(root_dir, "data", "processed") save_full_path = os.path.join(save_dir, f"{file_base_name}_processed.csv") # 创建目录 os.makedirs(save_dir, exist_ok=True) # 保存文件 tobeparsed.save_file(save_full_path) return tobeparsed if __name__ == '__main__': # 构建输入文件的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) root_dir = os.path.dirname(script_dir) input_file_path = os.path.join(root_dir, "data", "light_colors.csv") parsing(input_file_path)
关键提示
- 优先使用
os.path模块的工具函数(比如join、dirname、abspath)拼接路径,避免手动加斜杠,能适配Windows、Linux等不同操作系统的路径规则。 os.makedirs(save_dir, exist_ok=True)可以省去手动判断目录是否存在的步骤,代码更简洁,也避免了目录已存在时的报错。- 跨目录访问资源时,通过脚本的绝对路径向上追溯到根目录再构建目标路径,是最不容易出错的做法。
内容的提问来源于stack exchange,提问作者zara kolagar
相关产品推荐
相关产品推荐

