簡體   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