繁体   English   中英

如何在 Python 中打开和读取多个文件(例如 .txt)

[英]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.

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