路径未更改(os.chdir)

时间:2019-01-01 06:18:44

标签: python python-3.x

对于最后一部分#print(new_path),输出为“无”。能否详细解释一下发生此错误的原因。谢谢你。

import os
def rename_files():
    file_list = os.listdir(r"C:\Users\NISARG\Desktop\WinPython\prank")
    #print(file_list)

    saved_path= os.getcwd()
    print(saved_path)

    new_path= os.chdir(r"C:\Users\NISARG\Desktop\WinPython\prank")
    print(new_path)

3 个答案:

答案 0 :(得分:5)

os.chdir(r"C:\Users\NISARG\Desktop\WinPython\prank")    
new_path = os.getcwd()
print(new_path)

os.chdir具有副作用,并且始终返回None。如果您要在chdir之后使用当前工作目录,则必须提出要求。

答案 1 :(得分:0)

这是因为os.chdir()不返回任何值。下面是修复程序。

import os

def rename_files():
    file_list = os.listdir(r"H:\RishikeshAgrawani\Projects\GenWork\Python3")
    #print(file_list)

    saved_path= os.getcwd()
    print(saved_path) # H:\RishikeshAgrawani\Projects\GenWork\Python3

    os.chdir(r"H:\RishikeshAgrawani\Projects")
    new_path = os.getcwd()
    print(new_path)   # H:\RishikeshAgrawani\Projects

rename_files()

答案 2 :(得分:0)

os.chdir()在所有情况下均返回None

如果您想知道程序当前位于哪个目录,则必须调用os.getcwd()

此外,如果要确保程序安全地切换回原始工作目录,可以使用contextlib.contextmanager

import os
from contextlib import contextmanager

path = "/home"

# Save original working directory, assuming its / here
owd = os.getcwd()

@contextmanager
def change_working_directory(directory):
    try:
        os.chdir(directory)
        yield directory
    except FileNotFoundError:
        yield
    finally:
        os.chdir(owd)

print("Before context manager: %s" % owd)
with change_working_directory(path) as directory:
    print("Inside context manager: %s" % directory)

print("After context manager: %s" % owd)

将显示以下行为:

Before context manager: /
Inside context manager: /home
After context manager: /

上下文管理器说明:

切换到try块中的目录,对更改后的目录执行某些操作(在这种情况下,只打印它),然后在切换到finally块中的当前工作目录时上下文管理器退出。如果目录不存在,则会在except块中引发FileNotFoundError异常,并从生成器中产生None