Списки имен на основе имен текстовых файлов - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь написать функцию, которая берет списки слов из текстовых файлов и добавляет каждое слово в файле в список с тем же именем, что и текстовый файл. Например, использование текстовых файлов Verbs.txt и Nouns.txt приведет к тому, что все слова в Verbs.txt будут в списке verbs, а все существительные в списке nouns. Я пытаюсь сделать это в цикле for:

def loadAllWords():
    fileList = ['Adjectives.txt', 'Adverbs.txt', 'Conjunctions.txt',
                'IntransitiveVerbs.txt', 'Leadin.txt', 'Nounmarkers.txt',
                'Nouns.txt', 'TransitiveVerbs.txt']
    for file in fileList:
        infile = open(file, 'r')
        word_type = file[:-4]
        word_list = [line for line in infile]
    return word_list

Конечно, я мог бы сделать это легко один раз для каждого текстового файла:

def loadAllWords():
    infile = open("Adjectives.txt", "r")
    wordList = []
    wordList = [word for word in infile]
    return wordList

но я бы хотел, чтобы моя функция делала это автоматически с каждым. Есть ли способ сделать это, или я должен просто придерживаться цикла для каждого файла?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете создавать новые переменные с пользовательскими именами, манипулируя словарем locals(), в котором хранятся локальные переменные.Но трудно представить себе случай, когда это было бы хорошей идеей.Я настоятельно рекомендую Стивену Роучу использовать словарь, который позволит вам более аккуратно отслеживать списки.Но если вы действительно хотите создать локальные переменные для каждого файла, вы можете использовать небольшое изменение его кода:

results = {}
for file in file_list:
    with open(file, 'r') as infile:
        word_type = file[:-4]
        results[word_type] = list(infile)
# store each list in a local variable with that name
locals.update(results)
0 голосов
/ 07 мая 2018

Вы должны использовать dict для этого типа (не проверено):

results = {}
for file in file_list:
    infile = open(file, 'r')
    word_type = file[:-4]
    results[word_type] = [line for line in infile]
return results

также вам не нужно понимание списка, вы можете просто сделать:

results[word_type] = list(infile)
...