[英]How to open and read multiple files (ex. .txt) in Python
作为 Python 的介绍,我的任务是编写一个简单的德语到英语以及英语到德语的翻译器。 Both.txt 文件的写法如下:
Italy Italien
Germany Deutschland
Austria Österreich
...
这是我的代码:
woerter = {}
fobj = open("woerterbuch.txt", "r") # and "woerterbuch2.txt"
for line in fobj:
line = line.strip()
zuordnung = line.split(" ")
woerter[zuordnung[0]] = zuordnung[1]
fobj.close()
print("Um das Spiel zu beenden geben Sie 'Ende' ein!")
while True:
wort = input("Geben Sie ein Wort ein: ")
if wort in woerter: # if word in words
print("Das deutsche Wort lautet:", woerter[wort]) # the german word is:
elif wort == "Ende":
break
else:
print("Das Wort ist unbekannt!") # Word unknown
我有两个要在此代码中实现的单独的 .txt 文件。 但是,以我目前的知识,我只能实现一个。 一旦我尝试编写另一个代码,第一个woerterbuch.txt
就没有被注册。 目前您只能输入英文单词进行德语翻译。 如果你能告诉我如何输入德语单词进行英文翻译,我会很高兴!
如果您有“pandas”模块,您可以像“CSV”文件一样构建语言翻译文件,然后从该文件构建字典。 以下是应符合您项目精神的“原理证明”代码片段。
import pandas as pd
woerter = {}
df=pd.read_csv('Words.csv')
list_english = df['English'].tolist()
list_deutsch = df['Deutsch'].tolist()
for i in range(0, len(list_english)):
woerter[list_english[i]] = list_deutsch[i] # English to German
woerter[list_deutsch[i]] = list_english[i] # Deutsch nach Englisch
print(woerter)
print("Um das Spiel zu beenden geben Sie 'Ende' ein!")
while True:
wort = input("Geben Sie ein Wort ein: ")
if wort == "Ende":
break
if wort in woerter: # if word in words
print("Das übersetzte wort ist:", woerter[wort]) # the translated word is:
else:
print("Das Wort ist unbekannt!") # Word unknown
使用它可以设置一个简单的单词/短语对文件。
English,Deutsch
Hello,Guten Tag
Goodbye,Auf Wiedersehen
cold,kalt
hot,heiss
blue,blau
small,klien
excuse me,
thanks,vielen dank
etcetara,und so weiter
这样,对只输入一次,字典可以构建为双向的。
这是我终端上的一些示例测试。
@Una:~/Python_Programs/Translate$ python3 Translate.py
{'Hello': 'Guten Tag', 'Guten Tag': 'Hello', 'Goodbye': 'Auf Wiedersehen', 'Auf Wiedersehen': 'Goodbye', 'cold': 'kalt', 'kalt': 'cold', 'hot': 'heiss', 'heiss': 'hot', 'blue': 'blau', 'blau': 'blue', 'small': 'klien', 'klien': 'small', 'excuse me': verzeihung, verzeihung: 'excuse me', 'thanks': 'vielen dank', 'vielen dank': 'thanks', 'etcetara': 'und so weiter', 'und so weiter': 'etcetara'}
Um das Spiel zu beenden geben Sie 'Ende' ein!
Geben Sie ein Wort ein: Hello
Das deutsche Wort lautet: Guten Tag
Geben Sie ein Wort ein: Guten Tag
Das deutsche Wort lautet: Hello
Geben Sie ein Wort ein: etcetera
Das Wort ist unbekannt!
Geben Sie ein Wort ein: etcetara
Das deutsche Wort lautet: und so weiter
Geben Sie ein Wort ein: Ende
试试看。
如果两者都有英语->德语,那么您只需将文件读取代码放入一个循环中,循环遍历您要读取的所有文件。 如果语言被翻转,您将需要单独的代码块来处理它。
为了方便起见,让我们定义一个 function 来读取文件并返回字典。
def read_dictionary_file(file_name):
woerter = {}
fobj = open(file_name, "r")
for line in fobj:
line = line.strip()
zuordnung = line.split()
woerter[zuordnung[0]] = zuordnung[1]
fobj.close()
return woerter
侧边栏:由于上述 function 中的循环所做的唯一事情是构建字典,因此可以使用dict
构造函数将其转换为单行,如下所示:
def read_dictionary_file(file_name):
with open(file_name, "r") as fobj:
woerter = dict(line.strip().split() for line in fobj)
return woerter
现在,如果你所有的文件都是英语->德语,你只需要多次调用这个 function 来构建你的字典。
en_de = dict()
file_names = ["woerterbuch.txt", "woerterbuch2.txt"]
for file_name in file_names:
file_words = read_dictionary_file(file_name)
en_de.update(file_words)
最后,您应该有一个字典en_de
,其中包含英语单词的键,它们的值是各自的德语翻译。
现在,由于字典的全部目的是启用快速查找,我们需要为该翻译创建反向字典 - 德语到英语 - 而不是遍历en_de
中的所有值来查找我们想要的德语单词. 为此,请使用以下命令:
def reverse_dictionary(input_dict):
return {v: k for k, v in input_dict.items()}
de_en = reverse_dictionary(en_de)
此时,您应该有两本词典——一本英文到德文,另一本德文到英文。 现在,您可以尝试在任一字典中查找输入单词并打印 output。
inp = input("Enter your word: ")
if inp in en_de or inp in de_en:
if inp in en_de:
translation = en_de[inp]
print(f"(EN) {inp} == {translation} (DE)")
if inp in de_en:
translation = en_de[inp]
print(f"(DE) {inp} == {translation} (EN)")
else:
print("Word unknown")
现在,如果您的两个文件包含不同的顺序,即一个包含EN->DE,另一个包含DE->EN,您仍然可以使用我们定义的这些函数,但略有不同。
en_de = read_dictionary_file("woerterbuch.txt")
de_en = read_dictionary_file("woerterbuch2.txt")
如果您的 EN->DE 词典包含您的 DE->EN 词典中没有的单词,并且您想要反转它,您可以执行以下操作:
en_de2 = reverse_dictionary(de_en)
de_en2 = reverse_dictionary(en_de)
en_de.update(en_de2)
de_en2.update(de_en2)
翻译用户输入的代码保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.