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

2024-06-26 10:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()

Tags: anmitdefprintzudiejasie
3条回答

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

要将所有输出写入脚本中的文件,需要更改代码,将输入和输出发送到两个位置。您可以用一种奇特的方式来实现这一点,方法是更改标准输入和输出流的定义,使它们能够做到这一点。这是一件复杂的事情,要做到恰到好处

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

我知道您要求只将用户输入重定向到文件,但我发现您通常希望保存输入和输出,以便在了解用户为什么输入他们所做的事情方面有一些上下文可供使用。 因此,最灵活的解决方案是通过自定义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中找到

如果您确实只想保存输入,因此不想使代码复杂化以允许保存消息输出,那么您可以使用相同的技术来替换input函数。然后,您可以这样定义自定义输入函数:

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')

相关问题 更多 >