【问题标题】:PYTHON - text store [closed]PYTHON - 文本存储[关闭]
【发布时间】:2014-06-11 21:27:56
【问题描述】:

我的最后一个问题被问错了。如果我的代码是

import os
#hard code the path to the external file
external_file = '/name.txt'
#if file exists, use it to load name, else ask user
if os.path.isfile(external_file):
    name = open(external_file).read()
else:
    name = raw_input("What's your name?")

如何将名称存储在 .txt 中,以便下次启动程序时记住它,但如果我告诉它“这不是我的名字”,它将返回“你的名字是什么”并存储名称 我做错了什么

【问题讨论】:

  • 您要将名称存储在external_file 还是其他文件中?我也不理解您的规范的第二部分。您应该在哪里/何时输入“那不是我的名字”?
  • 它存储在哪里并不重要,只要它存储,但为此,我们使用 external_file 并且它是一个在线代码,因此您可以根据自己的标准对其进行自定义,以便每次使用您自己的名称.像一个机器人。
  • 两个注意事项:1)关于这个问题:你展示了代码,这很好,但你没有准确地说明代码的问题是什么。请这样做。 2) 关于使用本网站的一般情况。当您的问题被搁置时,您通常不应创建重复的问题,而应不断改进原始问题。当您这样做时,它将被审查并可能重新打开。
  • 好吧,对不起。我不知道它可以重新打开。我在应用程序上,所以它受到限制

标签: python python-2.7 python-2.6 python-idle


【解决方案1】:

如果文件不存在,这将附加到文件并创建文件:

import os
#hard code the path to the external file
external_file = 'names.txt'
#if file exists, use it to load name, else ask user
if not os.path.isfile(external_file):
    with open(external_file, "a") as f:
        pass
#if file exists, use it to load name, else ask user
name = raw_input("What's your name?")
with open(external_file, "r") as f:
    lines = f.read().strip().split() # split the names to avoid issues like name "a" in name "al" being True
    if name in lines:
        print "Hi {}".format(name)
    else:
        with open(external_file, "a") as f: # using "a" will append to the file
            f.write(name)
            f.write("\n")

我不确定您检查用户是否存在的逻辑,因为您需要知道用户名才能检查用户名是否已在文件中。

这反映了您的 cmets:

import os

#hard code the path to the external file
external_file = 'names.txt'
#if file does not exist ask user for name and save it
if not os.path.isfile(external_file):
    name = raw_input("What's your name?")
    print "Hi {} I am storing your name".format(name)
    with open(external_file, "a") as f:
        f.write(name)
else:
# file exists, use it to load name and print
    with open(external_file, "r") as f:
        name =f.read()
        print "Hi {}".format(name)

如果文件不存在,则名称不能在其中,因此这将询问用户他们的姓名或如果文件存在则打印“您好”

【讨论】:

  • 所以这会存储名称并在您每次启动代码时使用它?
  • 所以你只想存储一个名字?您从哪里获得名称以从文件中签入第一个实例?
  • 是的。就像它会存储名称并在每次程序启动时打印它,但如果 .txt 中没有名称,那么它会询问它的名称。
  • 好的我明白了,我会编辑,所以只有一个文件和一个名称是吗?
  • 这将来自“你叫什么名字”
【解决方案2】:

如果您想将用户名写入文件,只需在代码的else 块中执行此操作即可:

if os.path.isfile(external_file):
    with open(external_file) as in_f:
        name = in_f.read()
else:
    name = raw_input("What's your name?")
    with open(external_file, "w") as out_f:
        out_f.write(name)

我还修改了代码以使用with 语句来确保文件在您完成读取或写入后关闭。

我不确定您希望如何让用户说您从文件中读取的名称不正确。文件写入部分可以使用与上面的else 块相同的代码。

【讨论】:

  • 它是一个机器人,所以你根据每个用户进行更改,那么更改代码是什么?
  • @user3729400:您的问题甚至没有暗示您的代码如何处理用户之间的差异,所以我无法真正回答。您可以使用某种更复杂的数据结构(如字典)写入文件(可能使用pickle),或者您可以拥有多个文件,每个用户一个。
猜你喜欢
  • 2021-07-08
  • 2011-04-20
  • 1970-01-01
  • 2011-02-17
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多