如何向不同目录的Python脚本传递文件路径并优化实现?
优化方案:简化Python脚本的路径处理与调用
针对你的需求,这里有几种更简洁可靠的实现方式,避免手动传递当前目录参数,同时用Python内置模块更稳妥地处理路径:
方案1:自动获取当前执行目录(无需传$(pwd))
利用Python的os.getcwd()可以直接获取脚本执行时的工作目录(也就是你运行python命令所在的x/y/z/),不用手动传递路径参数,简化调用流程。
优化后的脚本代码
import os import sys def modify_file_content(content): # 这里替换成你的实际内容修改逻辑 # 示例:将所有"foo"替换为"bar" return content.replace("foo", "bar") if __name__ == "__main__": # 获取当前执行目录(即x/y/z/) current_work_dir = os.getcwd() # 输入文件名:从命令行取,默认值设为my_file.txt input_filename = sys.argv[1] if len(sys.argv) > 1 else "my_file.txt" input_file_path = os.path.join(current_work_dir, input_filename) # 构造输出路径:基于当前目录的上级目录(x/y/)拼接q/w/e/ parent_dir = os.path.dirname(current_work_dir) output_dir = os.path.join(parent_dir, "q", "w", "e") # 确保输出目录存在,不存在则自动创建 os.makedirs(output_dir, exist_ok=True) output_file_path = os.path.join(output_dir, input_filename) # 读取、修改、写入文件 with open(input_file_path, 'r', encoding='utf-8') as f: original_content = f.read() modified_content = modify_file_content(original_content) with open(output_file_path, 'w', encoding='utf-8') as f: f.write(modified_content)
调用方式
在x/y/z/目录下直接运行:
# 如果文件名固定为my_file.txt,甚至可以省略参数 python a/b/c/my_script.py # 或者指定文件名(如果需要处理其他文件) python a/b/c/my_script.py my_file.txt
方案2:灵活配置输出路径(通用型脚本)
如果需要让脚本支持任意输出目录,可以把输出目录作为命令行参数传入,进一步提升脚本通用性:
修改后的核心代码
if __name__ == "__main__": # 检查参数数量 if len(sys.argv) < 3: print("使用方法: python my_script.py <输入文件名> <输出目录>") sys.exit(1) input_filename = sys.argv[1] output_dir = sys.argv[2] current_work_dir = os.getcwd() input_file_path = os.path.join(current_work_dir, input_filename) os.makedirs(output_dir, exist_ok=True) output_file_path = os.path.join(output_dir, input_filename) # 后续读取、修改、写入逻辑同方案1
调用方式
python a/b/c/my_script.py my_file.txt x/y/q/w/e/
优势说明
- 无需手动传递
$(pwd),脚本自动获取当前工作目录,减少命令行参数和人为出错概率 - 使用
os.path模块处理路径,天然支持跨平台(Windows/Linux/macOS均可正常运行) - 自动创建输出目录,避免因目录不存在导致的写入失败
- 代码结构清晰,便于后续扩展修改,比bash函数的字符串解析更可靠稳定
内容的提问来源于stack exchange,提问作者tuemar29
相关产品推荐
相关产品推荐

