Python 当我在控制台外执行时,脚本执行目录发生变化

Python script execution directory changes when I execute outside of Console

TLDR:当我 运行 双击它时,我想将脚本的工作目录更改为脚本文件的位置(而不是 system32)。
我有一个非常烦人的问题,我无法解决。我正在构建一个 python 脚本,它将 4 个文本文件作为输入并使用这些文本文件创建一些图表和一个 excel sheet。我打算将我的脚本传递给一位朋友,他会将此脚本复制到不同的文件夹中,然后只需双击脚本即可在这些文件夹中执行脚本。我面临的问题是当我从 cmd 中执行我的代码时一切正常。但是如果我双击它,我的代码工作的目录会自动改变,我的程序找不到所需的 4 个文本文件。我在下面附上了我的代码的必需部分,还附上了一些屏幕截图。
ss1
ss2

def fileOpenCheckLoad(fname):
    pl=list()
    try:
        fh=open(fname)
    except:
        print("ERROR:"+ fname +" is missing. Execution will terminate.")
        x=input("Press enter to quit.")
        quit()
    test1=fh.readline()
    test2=fh.readline()
    if test1[6]!=fname[5] and test2!='t x y\n' :
        print("ERROR: Check the contents of:"+ fname)
        x=input("Press enter to quit.")
        quit()
    count=0
    for lines in fh:
        count=count+1
        if count>2 :
            nums=lines.split()
            pl.append((float(nums[2]), float(nums[2])))
    tbr=(pl,count-2)
    return tbr

# main starts here.
cwd = os.getcwd()
print(cwd)
# In this part we open and load files into the memory. If there is an error we terminate.
(pl1, count1)=fileOpenCheckLoad('point1.txt')
(pl2, count2)=fileOpenCheckLoad('point2.txt')
(pl3, count3)=fileOpenCheckLoad('point3.txt')
(pl4, count4)=fileOpenCheckLoad('point4.txt')

在调用 os.getcwd() 之前,插入此行:

os.chdir(os.path.dirname(os.path.abspath(__file__)))

说明

  • __file__是Python中的特殊变量;如所述 here,“__file__ 是从中加载模块的文件的路径名”
  • os.path.abspath returns 输入文件或目录的绝对路径(我包含这个是因为取决于你加载 Python 文件的方式,有时 __file__将存储为相对路径,使用绝对路径往往更安全)
  • os.path.dirname returns 包含输入文件的目录的名称(因为如果我们给它一个文件的名称,chdir 将 return 出错, 所以我们需要给它包含文件的目录的名称)
  • os.chdir 更改工作目录