在我将文件移动到另一个目录后,为什么python程序会继续写入它原来所在的目录?

在我将文件移动到另一个目录后,为什么python程序会继续写入它原来所在的目录?,python,Python,我有两个目录。我在dir_1中有一个python程序,它也在dir_1中写入.txt文件。我本想在dir_2中创建它们,但当我将它们都移动到dir_2中时,python程序不会写入dir_2中现有的.txt文件,而是在dir_1中创建一个新的.txt文件并写入其中。我该如何解决这个问题?我对编程非常陌生,python和Google并没有帮助我,可能是因为我不知道到底要搜索什么 with open('guest_book.txt', 'w') as file: while True:

我有两个目录。我在dir_1中有一个python程序,它也在dir_1中写入.txt文件。我本想在dir_2中创建它们,但当我将它们都移动到dir_2中时,python程序不会写入dir_2中现有的.txt文件,而是在dir_1中创建一个新的.txt文件并写入其中。我该如何解决这个问题?我对编程非常陌生,python和Google并没有帮助我,可能是因为我不知道到底要搜索什么

with open('guest_book.txt', 'w') as file:
    while True:
        name = input('Please enter your name: ')
        if name == 'q':
            break
        else:
            print(f"Hello, {name.title()}!\nYou have been added to the guest"
                  f"book")
            file.write(f"{name.title()}\n")

Python会写入您提供给它的文件位置。如果此文件位置是相对路径,则它将创建相对于脚本目录的文件。也就是说,当您移动脚本时,将相对于新的目录创建
.txt
文件

另一方面,如果您提供了绝对路径,那么脚本位于何处/从何处执行并不重要。相反,它将始终在该位置创建文件

听上去,当你想要一个相对路径时,你正在使用一个绝对路径

因此,将类似于
/home/bob/file.txt
(Linux)或
C:\\Users\bob\file.txt
(Win)的内容更改为简单的
file.txt
,甚至
/file.txt


更新:因为您一直在使用相对位置,所以问题在于执行脚本的上下文这里的问题不是你的代码,而是你如何执行它。

正如vlovero所建议的,可能您的IDE没有在其新位置执行新文件

一种可靠的测试方法是在终端中导航到
dir_2
,然后运行

python your_program_name.py

这将在
dir_2
位置执行脚本。

Python将写入您提供给它的文件位置。如果此文件位置是相对路径,则它将创建相对于脚本目录的文件。也就是说,当您移动脚本时,将相对于新的目录创建
.txt
文件

另一方面,如果您提供了绝对路径,那么脚本位于何处/从何处执行并不重要。相反,它将始终在该位置创建文件

听上去,当你想要一个相对路径时,你正在使用一个绝对路径

因此,将类似于
/home/bob/file.txt
(Linux)或
C:\\Users\bob\file.txt
(Win)的内容更改为简单的
file.txt
,甚至
/file.txt


更新:因为您一直在使用相对位置,所以问题在于执行脚本的上下文这里的问题不是你的代码,而是你如何执行它。

正如vlovero所建议的,可能您的IDE没有在其新位置执行新文件

一种可靠的测试方法是在终端中导航到
dir_2
,然后运行

python your_program_name.py

这将在
目录2
位置执行脚本。

由于您没有指定绝对路径,因此您的程序将指定一个相对于当前工作目录的目录(例如,如果您指定了一个路径,例如
”../guest_book.txt
,那么您将指定一个比当前工作目录高一级的目录)。因此,让我们假设您的操作系统是Linux,Python程序驻留在
/my_home/programs

cd /my_home/data # this is the current working directory
python ../programs/your_program.py

执行程序时,当前的工作目录是
/home/my\u home/data
,即使正在执行的程序位于
/my\u home/programs
中,因此输出文件将创建在
/my\u home/data
目录中。可以调用该目录来告诉您当前的工作目录是什么。

因为如果没有指定绝对路径,那么您的程序将指定一个相对于当前工作目录的目录(例如,如果您指定了一个路径,如
“../guest_book.txt
”,那么您将指定一个比当前工作目录高一级的目录)。因此,让我们假设您的操作系统是Linux,Python程序驻留在
/my_home/programs

cd /my_home/data # this is the current working directory
python ../programs/your_program.py

执行程序时,当前的工作目录是
/home/my\u home/data
,即使正在执行的程序位于
/my\u home/programs
中,因此输出文件将在
/my\u home/data
目录中创建。可以调用它来告诉您当前的工作目录是什么。

您好,请将您的代码放到您的帖子中,以便我们知道您是如何创建文件的。您是否记得在移动后从
目录2
在文本编辑器中重新加载您的
.py
文件?请发布预期结果。显示中间结果与您预期结果的偏差。您需要提及的确切路径,例如,在您的案例中,目录1/guest_书。txt@Hussain在我移动文件之前我不需要这样做有什么原因吗,但现在我需要了?嗨,请将代码附加到您的帖子中,这样我们就知道您是如何创建文件的。您是否记得在移动文件后从
目录2
在文本编辑器中重新加载
.py
文件?请发布预期的。显示中间文件在哪里e结果与您预期的结果不同。您需要提及具体的路径,例如在您的案例目录1/宾客手册中。txt@Hussain在我移动文件之前,我不需要这样做有什么原因吗?现在我这样做了吗?我只是包含了程序中的代码,在将文件移动到第二个目录之前或之后,我从未更改过guest_book.txt中的文件路径ectory。这解决了问题,谢谢!现在,我知道在将来,我的编辑器(pycharm)这样做有什么原因吗?@sprunner编辑器通常会保存工作文件的临时副本,直到您保存它(CTRL-S)。如果您在磁盘上移动文件,您需要删除当前工作文件