Как читать несколько текстовых файлов в виде строк из двух папок одновременно, используя readline () в python? - PullRequest
0 голосов
/ 24 апреля 2020

В настоящее время имеется версия следующего сценария, которая использует два простых фрагмента readline () для чтения однострочного файла .txt из двух разных папок. Работает под Ubuntu 18.04 и python 3.67. Не использует glob.

Обнаружена ошибка 'NameError' при попытке прочитать несколько текстовых файлов из одних и тех же папок с помощью sorted.glob

readlines (), приводит к readlines () ошибка, потому что входные данные из файлов .txt должны быть строками, а не списками.

Новое для python. Пробовал онлайн python форматирование, reindent.py et c. но безуспешно.

Надеюсь, что это простая проблема с отступами, поэтому она не будет проблемой в будущих скриптах.

Текущая ошибка из кода ниже:

Traceback (most recent call last):
  File "v1-ReadFiles.py", line 21, in <module>
    context_input = GenerationInput(P1=P1, P3=P3,
NameError: name 'P1' is not defined

Текущий модифицированный скрипт:

import glob
import os

from src.model_use import TextGeneration
from src.utils import DEFAULT_DECODING_STRATEGY, LARGE
from src.flexible_models.flexible_GPT2 import FlexibleGPT2
from src.torch_loader import GenerationInput

from transformers import GPT2LMHeadModel, GPT2Tokenizer

for name in sorted(glob.glob('P1_files/*.txt')):
    with open(name) as f:
        P1 = f.readline()

for name in sorted(glob.glob('P3_files/*.txt')):
    with open(name) as f:
        P3 = f.readline()

if __name__ == "__main__":

    context_input = GenerationInput(P1=P1, P3=P3,
                                    genre=["mystery"],
                                    persons=["Steve"],
                                    size=LARGE,
                                    summary="detective")

    print("PREDICTION WITH CONTEXT WITH SPECIAL TOKENS")
    model = GPT2LMHeadModel.from_pretrained('models/custom')
    tokenizer = GPT2Tokenizer.from_pretrained('models/custom')
    tokenizer.add_special_tokens(
        {'eos_token': '[EOS]',
         'pad_token': '[PAD]',
         'additional_special_tokens': ['[P1]', '[P2]', '[P3]', '[S]', '[M]', '[L]', '[T]', '[Sum]', '[Ent]']}
    )
    model.resize_token_embeddings(len(tokenizer))
    GPT2_model = FlexibleGPT2(model, tokenizer, DEFAULT_DECODING_STRATEGY)

    text_generator_with_context = TextGeneration(GPT2_model, use_context=True)

    predictions = text_generator_with_context(context_input, nb_samples=1)
    for i, prediction in enumerate(predictions):
        print('prediction n°', i, ': ', prediction)

1 Ответ

0 голосов
/ 30 апреля 2020

Благодаря афганиме здесь:

Проблема с функцией range () при использовании с readline () или счетчиком - читает и обрабатывает только последнюю строку в файлах

Удалено шарик. Также перенесены все модели = et c. загружать функции перед «с открытым ...»

with open("data/test-P1-Multi.txt","r") as f1, open("data/test-P3-Multi.txt","r") as f3:     
  for i in range(5):
    P1 = f1.readline()
    P3 = f3.readline()

    context_input = GenerationInput(P1=P1, P3=P3, size=LARGE)
    etc.
...