.txt 文件是否仅在进程终止后创建? Python

Are .txt files only created after the process is terminated? Python

也许这就是 Python 的工作方式,但我想我遗漏了一些东西,我环顾四周,但找不到任何解决这个问题的方法。

文本文件是在进程终止后才创建的,还是我弄错了?

这是我用来生成文本文件的代码:

user_name_token = open("user_name_token.txt", "w")

如果这正是 Python 的工作方式,并且 .txt 文件仅在进程终止后生成,则无需查看下面的代码。但是,如果我犯了一个错误,这就是 .txt 文件仅在进程终止后生成的原因,请告诉我。

我把我认为是相关的代码序列放在下面。

如果文件存在,下面的代码将里面的文本转换为一个 str 值,并在使用 str 值的地方产生一个问候语,但它在这里不相关。相反,我们将继续进行,就好像该文件还不存在一样;在 initialization():

之后转到 initial_greeting_and_initial_user_name_set()
initialization()

    def initialization():
        global user_name
        global initial_login_token
    
        if os.path.isfile("user_name_token.txt") == True:
    
            file = open("user_name_token.txt")
    
            user_name = file.read().replace("\n", " ")
    
            file.close
    
            print(user_name)
    
            time_based_greeting()
    
        else:
            initial_greeting_and_initial_user_name_set()

以下代码允许用户创建用户名并在按下按钮时导致 initial_greeting_and_inital_user_name_set_token_generation()

def initial_greeting_and_initial_user_name_set():
    global initial_greeting_label
    global initial_greeting_space0
    global user_name
    global initial_greeting_progression_button

    initial_greeting_label = Label(root, text="Hello! It's nice to meet you, my name is Eve, what's yours?")
    initial_greeting_space0 = Label(root, text=" ")
    user_name = Entry(root)
    initial_greeting_progression_button = Button(root,\
                                                 text="Enter",\
                                                 command=initial_greeting_and_initial_user_name_set_token_generation)

    initial_greeting_label.pack()
    initial_greeting_space0.pack()
    user_name.pack()
    initial_greeting_progression_button.pack()

以下代码使用用户 Entry 创建一个 .txt 文件,其中包含用户名并循环回 initialization()

def initial_greeting_and_initial_user_name_set_token_generation():
    global user_name_token

    user_name_token = open("user_name_token.txt", "w")

    user_name_token.write(user_name.get())

    initialization()

感谢您的任何帮助,特别是考虑到如果我实际上犯了一个错误需要阅读很长时间,这就是为什么仅在 window 关闭后才创建 .txt 文件的原因。

同样,如果仅在进程终止后生成 .txt 文件是正常的,而不是在创建它的代码 运行 时生成;那么就不需要考虑上面的代码了。

我不确定那是问题所在,但在该代码中:

initialization()

def initialization():
    global user_name
    global initial_login_token

    if os.path.isfile("user_name_token.txt") == True:

        file = open("user_name_token.txt")

        user_name = file.read().replace("\n", " ")

        file.close

        print(user_name)

        time_based_greeting()

    else:
        initial_greeting_and_initial_user_name_set()

在我看来,您好像忘了调用 file.close 方法。 在末尾添加方括号,因此它看起来如下所示: file.close().

不清楚您的代码在做什么,因为您打开文件进行写入,然后在关闭文件进行写入之前再次打开它进行读取。在继续打开文件进行阅读之前,您应该关闭文件进行写入:

def initial_greeting_and_initial_user_name_set_token_generation():
    global user_name_token

    user_name_token = open("user_name_token.txt", "w")

    user_name_token.write(user_name.get())

    user_name_token.close()

    initialization()

或更好:

def initial_greeting_and_initial_user_name_set_token_generation():
    global user_name_token

    with open("user_name_token.txt", "w") as user_name_token:

        user_name_token.write(user_name.get())()

    initialization()

后一种构造是打开文件的首选方式,这样您就可以确定它已关闭。它只会在 with 块内保持打开状态,然后会自动关闭。

Python 不会阻止任何 I/O 操作。与其他语言一样,它会立即执行操作。它可能会缓冲写入操作并将结果写入更大的块,但是当您在文件上调用 close() 时(或者当关联的 with 块退出时,所有写入都已完成,自动关闭文件)。