.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
块退出时,所有写入都已完成,自动关闭文件)。
也许这就是 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
块退出时,所有写入都已完成,自动关闭文件)。