繁体   English   中英

如何将所有用户输入保存在文本文件中?

[英]How can I save ALL user input in a text file?

我做了一份调查问卷,我想将所有用户的输入保存到一个文本文件中。 你知道我能做什么吗?

def start():
    print("Hallo, ich bin Roni, Ihr Assistent rund um das Verhalten mit einem Coronaverdacht! ")
    print("Ich stelle Ihnen folgend einige wichtige Fragen.")
    print("Bitte achten Sie darauf Ja und Nein zu benutzen, außer Sie sind explizit dazu aufgefordert eine offene Frage zu beantworten!")
    print("Aus Datenschutzgründen teile ich Ihnen mit, dass die Konversation gespeichert wird.")
    print("Dies hilft uns dabei wichtige Daten schnell an die nötigen Instanzen zu schicken.")
    print("Na gut, dann fangen wir mal an :-)")

def verdacht():
    möglicher_verdacht = input("Haben Sie den Verdacht an COVID-19 erkrankt zu sein? (Ja/Nein): ")
    if möglicher_verdacht == "Ja":
        print("Ok, dann folgen nun ein paar Fragen! ")
    else:
        print("Bleiben Sie gesund und achten Sie auf die AHA+L Regel! ")
        
def kontakt():
    kontakt = input("Hatten Sie Kontakt mit einer an COVID-19 infizierten Person? (Ja/Nein): ")
    if kontakt == "Ja":
        symptome()
    else:
        symptome()

一种方法是在运行 Python 脚本的级别捕获 output。 例如,在 Linux 提示符下,您可以使用tee工具将脚本的 output 定向到文件。

要将所有 output 写入脚本内的文件,您需要更改代码以实际将输入和 output 发送到两个地方。 您可以通过更改标准输入和 output 流的定义来以一种奇特的方式做到这一点,以便它们执行此操作。 这是一件复杂的事情,要做到恰到好处。

另一种选择是让您的代码使用您自己的自定义printinput函数,将所有 output 重定向到控制台和您选择的文件。

我知道您要求仅将用户输入重定向到文件,但我发现您经常希望同时保存输入和 output,以便您有一些上下文可以了解用户输入他们所做的事情的原因。 因此,最灵活的解决方案是通过自定义printinput例程重定向打印的消息和用户输入,但随后有一个开关可以让您指示是要保存消息和用户输入,还是只保存用户输入。

下面是如何做到这一点的演示:

log_file_path = "/tmp/logfile.txt"
save_messages = False

def myprint(msg):
    if save_messages:
        with open(log_file_path, "a") as f:
            f.write(msg + '\n')
    print(msg)


def myinput(msg):
    with open(log_file_path, "a") as f:
        if save_messages:
            f.write(msg)
        result = input(msg)
        f.write(result + '\n')
    return result


def start():
    myprint("Hallo, ich bin Roni, Ihr Assistent rund um das Verhalten mit einem Coronaverdacht! ")
    myprint("Ich stelle Ihnen folgend einige wichtige Fragen.")
    myprint(
        "Bitte achten Sie darauf Ja und Nein zu benutzen, außer Sie sind explizit dazu aufgefordert eine offene Frage zu beantworten!")
    myprint("Aus Datenschutzgründen teile ich Ihnen mit, dass die Konversation gespeichert wird.")
    myprint("Dies hilft uns dabei wichtige Daten schnell an die nötigen Instanzen zu schicken.")
    myprint("Na gut, dann fangen wir mal an :-)")


def verdacht():
    möglicher_verdacht = myinput("Haben Sie den Verdacht an COVID-19 erkrankt zu sein? (Ja/Nein): ")
    if möglicher_verdacht == "Ja":
        myprint("Ok, dann folgen nun ein paar Fragen! ")
    else:
        myprint("Bleiben Sie gesund und achten Sie auf die AHA+L Regel! ")


def kontakt():
    kontakt = myinput("Hatten Sie Kontakt mit einer an COVID-19 infizierten Person? (Ja/Nein): ")
    if kontakt == "Ja":
        symptome()
    else:
        symptome()

这段代码的运行方式似乎与原始版本相同,但在执行后,用户的输入将保存到文件“/tmp/logfile.txt”中。 如果您将save_messages设置为True而不是False ,那么所有进入控制台的文本,包括消息和用户输入,都将在文件/tmp/logfile.txt中找到。

如果您真的只想保存输入,并且不想使代码复杂化以允许保存消息 output,您可以使用相同的技术来替换input function。 然后,您可以像这样定义自定义输入 function:

def myinput(msg):
    with open(log_file_path, "a") as f:
        result = input(msg)
        f.write(result + '\n')
    return result

您可以使用列表来存储所有输入并在最后创建一个文件。

创建列表:

list = []

添加到列表:

list.append(data to add)

打开/创建文件并写入:

file = open("filename.txt", "w")
file.write(list)

该文件将在与脚本相同的文件夹中创建

完成后关闭文件:

file.close()

获取用户输入

user_input = input('user input: ')

存储在列表中

user_list = []
user_list.append(user_input)

使用上下文管理器打开文件,这样您就不必明确关闭,然后遍历列表并保存数据。

with open('user_input.txt', 'a') as file:
    for item in user_list:
        file.write(item + '\n')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM