是否可以在python上设置工作目录(os.chdir('path')),就像设置局部变量一样?我的意思是,仅在调用函数时才可能使用其他目录吗?
即我有
foo_function
|
module1---a.json
| |
| b.csv
|
module2---a.json
| |
| b.csv
module3
我想要(示例):
my_path_1 = '/module1/'
my_path_2 = '/module2/'
def foo(a,b,my_path):
os.chdir('my_path')
os.mkdir('csv')
os.mkdir('json')
shutil.move(a+'.json','json')
shutil.move(b+'.csv','csv')
现在,例如,如果我调用一个删除模块3的函数B,则将其删除,而不使用新的目录“ my_path”来搜索模块3(最后一次调用foo)
答案 0 :(得分:1)
您可以创建一个上下文管理器来做到这一点:
@contextlib.contextmanager
def temp_chdir(path):
prev = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(prev)
with temp_chdir("~/some_dir"):
funcion_a()
或装饰一个
def chdir_dec(path):
def decorator(fn):
@wraps(fn)
def _fn(*args, **kwargs):
with temp_chdir(path):
return fn(*args, **kwargs)
return _fn
return decorator
# example ...
@chdir_dec('../some_path')
def function_a():
os.system("ls")
答案 1 :(得分:0)
除非必须更改目录,否则最好使用绝对路径。
def foo(a,b,my_path):
csv_dir = os.path.join(my_path, 'csv')
json_dir = os.path.join(my_path, 'json')
os.mkdir(csv_dir)
os.mkdir(json_dir)
shutil.move(os.path.join(my_path, a+'.json'), json_dir)
shutil.move(os.path.join(my_path, b+'.csv'),' csv_dir)