如何将列表写入和读取文件? Python 3.7
How to write and read a list to a file? Python 3.7
我自己写的一个程序有问题,它检查你的词汇知识。您可以创建一个包含任意数量词汇的会话,您可以写下这些词汇及其答案,如果您写完这些词汇,程序会询问您这些词汇,您应该用另一种语言编写解决方案。单词保存在 2 个列表中(第一个列表用于第一种语言,另一个列表用于另一种语言中每个单词的解决方案)。一切正常,但如果您关闭程序,您的话将不会被保存。我想将这些列表保存在 .txt 文件中。创建 .txt 文件有效,但我无法将列表插入 .txt 文件,它说这应该是一个字符串。我尝试了很多方法,但仍然出现一些错误。我希望将这两个列表放在一个文件中,当我阅读它们时,它们应该以某种方式分开。
我希望有一个人可以帮助我。非常感谢!!!
我尝试了基本的 file.write 和 file.read 方法,但出现了一些错误,提示它不能是列表,它必须是字符串。
我也尝试了 join() 方法,但没有用。
而且我不能使用 pickle,因为我在 1 个文件中有两个列表,它们必须分开。
import random
import os.path
firstList = []
secondList = []
sprachen = ["Afrikaans", "Albanisch", "Amharisch", "Arabisch", "Armenisch", "Aserbaidschanisch", "Baskisch", "Bengalisch", "Birmanisch", "Bosnisch", "Bulgarisch", "Cebuano", "Chichewa", "Chinesisch", "Mandarin", "Dänisch", "Deutsch", "Englisch", "Esperanto", "Estnisch", "Filipino", "Finnisch", "Französisch", "Friesisch", "Galizisch", "Georgisch", "Griechisch", "Gujarati", "Haitianisch", "Hausa", "Hawaiisch", "Hebräisch", "Hindi", "Hmong", "Igbo", "Indonesisch", "Irisch", "Isländisch", "Italienisch", "Japanisch", "Javanisch", "Jiddisch", "Kannada", "Kasachisch", "Katalanisch", "Khmer", "Kirigisch", "Koreanisch", "Korsisch", "Kroatisch", "Kurdisch", "Kurmandschi", "Lao", "Lateinisch", "Latein", "Lettisch", "Litauisch", "Luxemburgisch", "Malagasy", "Malayalam", "Malaysisch", "Maltesisch", "Maori", "Marathi", "Mazedonisch", "Mongolisch", "Nepalesisch", "Niederländisch", "Norwegisch", "Paschtu", "Persisch", "Polnisch", "Portugiesisch", "Punjabi", "Rumänisch", "Russisch", "Samonaisch", "Schottisch-Gällisch", "Schwedisch", "Serbisch", "Sesotho", "Shona", "Sindhi", "Singhalesisch", "Slowakisch", "Slowenisch", "Somali", "Spanisch", "Suaheli", "Sundanesisch", "Tadschikisch", "Tamil", "Telugu", "Thailändisch", "Tschechisch", "Türkisch", "Ukrainisch", "Ungarisch", "Urdu", "Usbekisch", "Vietnamesisch", "Walisisch", "Weissrussisch", "Xhosa", "Yoruba", "Zulu"]
print("Willkommen beim Vokabelprogramm. Viel Spass beim Lernen!")
def start():
global name
projekt = input("Möchten Sie eine bestehende Lerneinheit öffnen [Open]
oder eine neue Lerneinheit beginnen [New]? ")
if projekt == "Open":
openProject = input("Welche Lerneinheit möchten Sie öffnen? ")
while os.path.exists(openProject + ".txt"):
name = openProject
output()
else:
erstellen = input("Diese Lerneinheit existiert unter diesem Namen noch nicht. Möchten Sie diese erstellen? ")
if erstellen == "Ja":
name = openProject
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
elif projekt == "New":
name = input("Wie möchten Sie diese Lerneinheit nennen? ")
while name == "":
print("Geben Sie für den Namen Ihrer Lerneinheit einen gültigen Wert ein.")
else:
while os.path.exists(name + ".txt"):
bestaetigung = input("Dieser Dateiname existiert bereits, möchten Sie diese Datei überschreiben? ")
if bestaetigung == "Ja":
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
else:
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Diese Eingabe ist ungültig.")
start()
def sprache():
global ersteSprache
global zweiteSprache
ersteSprache = input("Welche ist die erste Sprache, in der Sie die Vokabeln prüfen möchten? ")
while ersteSprache in sprachen:
zweiteSprache = input("Und die zweite Sprache? ")
while zweiteSprache in sprachen:
while zweiteSprache == ersteSprache:
print("Sie müssen 2 verschiedene Sprachen angeben!")
zweiteSprache = input("Welche ist die zweite Sprache? ")
while zweiteSprache in sprachen:
beginning()
else:
print("Diese Sprache gibt es nicht! Versuchen Sie die Sprachen nochmals einzugeben.")
sprache()
else:
beginning()
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
sprache()
def beginning():
vokabel = input("Geben Sie eine Vokabel auf " + ersteSprache + " ein: ")
if vokabel == "":
print("Bitte geben Sie für die Vokabel einen gültigen Wert ein.")
beginning()
firstList.append(vokabel)
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
if uebersetzung == "":
print("Bitte geben Sie für die Übersetzung einen gültigen Wert ein.")
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
secondList.append(uebersetzung)
def abfrage():
fertig = input("Ist das alles? Geben Sie Ja ein um die Vokabelliste zu bestätigen oder drücken Sie die Enter-Taste um noch eine Vokabel hinzuzufügen: ")
if fertig == "Ja":
with open(name + ".txt", "w") as file:
for combo in zip(firstList, secondList):
file.writelines(" ".join(combo) + "\n")
output()
elif fertig == "":
beginning()
else:
print("Diese Eingabe ist ungültig, bitte versuchen Sie es nochmals")
abfrage()
abfrage()
def output():
newLanguage_1 = []
newLanguage_2 = []
with open(name + ".txt", "r") as file:
for line in file.readlines():
word_1, word_2 = line.split()
newLanguage_1.append(word_1)
newLanguage_2.append(word_2)
ausgabe = random.choice(newLanguage_1)
print(ausgabe)
zahl = newLanguage_1.index(ausgabe)
pruefen = input("Übersetzung: ")
vokabelZweiteSprache = newLanguage_2[zahl]
def nochmal():
nochmals = input("Möchten Sie noch eine Vokabel prüfen (ENTER-Taste)? ")
if nochmals == "":
output()
else:
print("Viel Glück bei der Prüfung, Daumen sind gedrückt!")
exit()
if pruefen != vokabelZweiteSprache:
print("Leider falsch! Die richtige Lösung wäre " + vokabelZweiteSprache + " gewesen. Lernen Sie diese Vokabel nochmals!")
nochmal()
else:
print("Richtig! " + ausgabe + " heisst " + vokabelZweiteSprache + ".")
nochmal()
start()
@Kraay89
在这里我将 post 我的相关代码用于以下错误: IndexError: list index out of range
[编辑] 我检查了列表是否为空并且它是,但我不知道为什么,我在代码中分配了它,问题出在哪里:
new_currLanguage = []
with open(name + ".txt", "r") as file:
lines = file.readlines()
for lines[0] in file.readlines():
lang_1, lang_2 = lines[0].split()
new_currLanguage.append(lang_1, lang_2)
firstLanguage = new_currLanguage[0]
secondLanguage = new_currLanguage[1]
问题中没有一些代码示例,我假设了一些事情。
您可能尝试过一次将整个列表写入一个文件,但这不是解决此问题的最佳方法。忽略评论中的一些建议,例如您的数据结构可能存在的缺陷,我认为您可以使用以下代码开始,并从那里改进。
我使用的一些您可能不熟悉的关键功能:
zip() -> 同时遍历两个列表
str.join() -> 将两个字符串连接在一起,在本例中使用 space:" "
str.split() -> 在任何白色 space 字符
上拆分字符串
language_1 = ["Hello", "Bye", "Bike", "Car"] # English words
language_2 = ["Hallo", "Doei", "Fiets", "Auto"] # Dutch words
# Saving the lists:
with open("saved_lists.txt", 'w+') as myfile:
for combo in zip(language_1, language_2):
myfile.writelines(" ".join(combo)+"\n")
# Reading back:
new_language_1 = []
new_language_2 = []
with open("saved_lists.txt", 'r') as myfile:
for line in myfile.readlines():
word_1, word_2 = line.split()
new_language_1.append(word_1)
new_language_2.append(word_2)
我自己写的一个程序有问题,它检查你的词汇知识。您可以创建一个包含任意数量词汇的会话,您可以写下这些词汇及其答案,如果您写完这些词汇,程序会询问您这些词汇,您应该用另一种语言编写解决方案。单词保存在 2 个列表中(第一个列表用于第一种语言,另一个列表用于另一种语言中每个单词的解决方案)。一切正常,但如果您关闭程序,您的话将不会被保存。我想将这些列表保存在 .txt 文件中。创建 .txt 文件有效,但我无法将列表插入 .txt 文件,它说这应该是一个字符串。我尝试了很多方法,但仍然出现一些错误。我希望将这两个列表放在一个文件中,当我阅读它们时,它们应该以某种方式分开。 我希望有一个人可以帮助我。非常感谢!!!
我尝试了基本的 file.write 和 file.read 方法,但出现了一些错误,提示它不能是列表,它必须是字符串。 我也尝试了 join() 方法,但没有用。 而且我不能使用 pickle,因为我在 1 个文件中有两个列表,它们必须分开。
import random
import os.path
firstList = []
secondList = []
sprachen = ["Afrikaans", "Albanisch", "Amharisch", "Arabisch", "Armenisch", "Aserbaidschanisch", "Baskisch", "Bengalisch", "Birmanisch", "Bosnisch", "Bulgarisch", "Cebuano", "Chichewa", "Chinesisch", "Mandarin", "Dänisch", "Deutsch", "Englisch", "Esperanto", "Estnisch", "Filipino", "Finnisch", "Französisch", "Friesisch", "Galizisch", "Georgisch", "Griechisch", "Gujarati", "Haitianisch", "Hausa", "Hawaiisch", "Hebräisch", "Hindi", "Hmong", "Igbo", "Indonesisch", "Irisch", "Isländisch", "Italienisch", "Japanisch", "Javanisch", "Jiddisch", "Kannada", "Kasachisch", "Katalanisch", "Khmer", "Kirigisch", "Koreanisch", "Korsisch", "Kroatisch", "Kurdisch", "Kurmandschi", "Lao", "Lateinisch", "Latein", "Lettisch", "Litauisch", "Luxemburgisch", "Malagasy", "Malayalam", "Malaysisch", "Maltesisch", "Maori", "Marathi", "Mazedonisch", "Mongolisch", "Nepalesisch", "Niederländisch", "Norwegisch", "Paschtu", "Persisch", "Polnisch", "Portugiesisch", "Punjabi", "Rumänisch", "Russisch", "Samonaisch", "Schottisch-Gällisch", "Schwedisch", "Serbisch", "Sesotho", "Shona", "Sindhi", "Singhalesisch", "Slowakisch", "Slowenisch", "Somali", "Spanisch", "Suaheli", "Sundanesisch", "Tadschikisch", "Tamil", "Telugu", "Thailändisch", "Tschechisch", "Türkisch", "Ukrainisch", "Ungarisch", "Urdu", "Usbekisch", "Vietnamesisch", "Walisisch", "Weissrussisch", "Xhosa", "Yoruba", "Zulu"]
print("Willkommen beim Vokabelprogramm. Viel Spass beim Lernen!")
def start():
global name
projekt = input("Möchten Sie eine bestehende Lerneinheit öffnen [Open]
oder eine neue Lerneinheit beginnen [New]? ")
if projekt == "Open":
openProject = input("Welche Lerneinheit möchten Sie öffnen? ")
while os.path.exists(openProject + ".txt"):
name = openProject
output()
else:
erstellen = input("Diese Lerneinheit existiert unter diesem Namen noch nicht. Möchten Sie diese erstellen? ")
if erstellen == "Ja":
name = openProject
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
elif projekt == "New":
name = input("Wie möchten Sie diese Lerneinheit nennen? ")
while name == "":
print("Geben Sie für den Namen Ihrer Lerneinheit einen gültigen Wert ein.")
else:
while os.path.exists(name + ".txt"):
bestaetigung = input("Dieser Dateiname existiert bereits, möchten Sie diese Datei überschreiben? ")
if bestaetigung == "Ja":
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Die Aktion wird abgebrochen.")
start()
else:
file = open(name + ".txt", "w+")
file.close()
print("Die Lerneinheit, namens " + name + ", wurde erstellt.")
sprache()
else:
print("Diese Eingabe ist ungültig.")
start()
def sprache():
global ersteSprache
global zweiteSprache
ersteSprache = input("Welche ist die erste Sprache, in der Sie die Vokabeln prüfen möchten? ")
while ersteSprache in sprachen:
zweiteSprache = input("Und die zweite Sprache? ")
while zweiteSprache in sprachen:
while zweiteSprache == ersteSprache:
print("Sie müssen 2 verschiedene Sprachen angeben!")
zweiteSprache = input("Welche ist die zweite Sprache? ")
while zweiteSprache in sprachen:
beginning()
else:
print("Diese Sprache gibt es nicht! Versuchen Sie die Sprachen nochmals einzugeben.")
sprache()
else:
beginning()
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
else:
print("Diese Sprache gibt es nicht, bitte versuchen Sie es nochmals.")
sprache()
def beginning():
vokabel = input("Geben Sie eine Vokabel auf " + ersteSprache + " ein: ")
if vokabel == "":
print("Bitte geben Sie für die Vokabel einen gültigen Wert ein.")
beginning()
firstList.append(vokabel)
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
if uebersetzung == "":
print("Bitte geben Sie für die Übersetzung einen gültigen Wert ein.")
uebersetzung = input("Was bedeutet diese Vokabel auf " + zweiteSprache + "? ")
secondList.append(uebersetzung)
def abfrage():
fertig = input("Ist das alles? Geben Sie Ja ein um die Vokabelliste zu bestätigen oder drücken Sie die Enter-Taste um noch eine Vokabel hinzuzufügen: ")
if fertig == "Ja":
with open(name + ".txt", "w") as file:
for combo in zip(firstList, secondList):
file.writelines(" ".join(combo) + "\n")
output()
elif fertig == "":
beginning()
else:
print("Diese Eingabe ist ungültig, bitte versuchen Sie es nochmals")
abfrage()
abfrage()
def output():
newLanguage_1 = []
newLanguage_2 = []
with open(name + ".txt", "r") as file:
for line in file.readlines():
word_1, word_2 = line.split()
newLanguage_1.append(word_1)
newLanguage_2.append(word_2)
ausgabe = random.choice(newLanguage_1)
print(ausgabe)
zahl = newLanguage_1.index(ausgabe)
pruefen = input("Übersetzung: ")
vokabelZweiteSprache = newLanguage_2[zahl]
def nochmal():
nochmals = input("Möchten Sie noch eine Vokabel prüfen (ENTER-Taste)? ")
if nochmals == "":
output()
else:
print("Viel Glück bei der Prüfung, Daumen sind gedrückt!")
exit()
if pruefen != vokabelZweiteSprache:
print("Leider falsch! Die richtige Lösung wäre " + vokabelZweiteSprache + " gewesen. Lernen Sie diese Vokabel nochmals!")
nochmal()
else:
print("Richtig! " + ausgabe + " heisst " + vokabelZweiteSprache + ".")
nochmal()
start()
@Kraay89
在这里我将 post 我的相关代码用于以下错误: IndexError: list index out of range
[编辑] 我检查了列表是否为空并且它是,但我不知道为什么,我在代码中分配了它,问题出在哪里:
new_currLanguage = []
with open(name + ".txt", "r") as file:
lines = file.readlines()
for lines[0] in file.readlines():
lang_1, lang_2 = lines[0].split()
new_currLanguage.append(lang_1, lang_2)
firstLanguage = new_currLanguage[0]
secondLanguage = new_currLanguage[1]
问题中没有一些代码示例,我假设了一些事情。
您可能尝试过一次将整个列表写入一个文件,但这不是解决此问题的最佳方法。忽略评论中的一些建议,例如您的数据结构可能存在的缺陷,我认为您可以使用以下代码开始,并从那里改进。
我使用的一些您可能不熟悉的关键功能:
zip() -> 同时遍历两个列表
str.join() -> 将两个字符串连接在一起,在本例中使用 space:" "
str.split() -> 在任何白色 space 字符
上拆分字符串language_1 = ["Hello", "Bye", "Bike", "Car"] # English words
language_2 = ["Hallo", "Doei", "Fiets", "Auto"] # Dutch words
# Saving the lists:
with open("saved_lists.txt", 'w+') as myfile:
for combo in zip(language_1, language_2):
myfile.writelines(" ".join(combo)+"\n")
# Reading back:
new_language_1 = []
new_language_2 = []
with open("saved_lists.txt", 'r') as myfile:
for line in myfile.readlines():
word_1, word_2 = line.split()
new_language_1.append(word_1)
new_language_2.append(word_2)