如何在Python中读取和处理多个文本文件?

问题描述 投票:0回答:1

具有在ubuntu 18.04上运行的python 3.6脚本,可通过手电筒和Bart转换器处理单个文本文件,但在尝试从文件夹读取和处理多个文本文件时遇到“ NameError”问题。 python的新手。

请注意,如果使用以下代码段而不导入glob和os,则脚本可以在单个文件上完美运行:

with open('output/input.txt') as corpus:
    lines = corpus.readlines()
    lines = [line.replace("\n", "") for line in lines]

NameError是由下面的“ generate_xsum_READ_FILES.py”引起的。不知道为什么会发生这种情况,因为它已经在def main()下定义了:并且可以使用单个文本文件。

Traceback (most recent call last):
  File "generate_xsum_READ_FILES.py", line 29, in <module>
    preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
NameError: name 'bart' is not defined

generate_xsum_READ_FILES.py

非常感谢您的帮助,因此我可以在以后的脚本中避免此错误。干杯。

import glob
import os

import torch
from fairseq.models.bart import BARTModel

def main():
    bart = BARTModel.from_pretrained('bart_large_xsum', checkpoint_file='model.pt')
    bart.cuda()
    bart.half()
    bart.eval()

file_list = glob.glob(os.path.join(os.getcwd(), "output", "*.txt"))

corpus = []

for file_path in file_list:
    with open(file_path) as corpus:
        lines = corpus.readlines()
        lines = [line.replace("\n", "") for line in lines]

        print("[Before]")
        for i, line in enumerate(lines):
            print(f"({i+1}): {line}")

        with torch.no_grad():
            preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
            print("\n[After]")
            for i, pred in enumerate(preds):
                print(f"({i+1}): {pred}")


if __name__ == "__main__":
    main()
python-3.x function file-io
1个回答
0
投票

您的bartmain功能的范围内定义。而其余代码在外面(通过缩进)。我想这是因为缩进错误。

import glob
import os

import torch
from fairseq.models.bart import BARTModel


def main():
    bart = BARTModel.from_pretrained('bart_large_xsum', checkpoint_file='model.pt')
    bart.cuda()
    bart.half()
    bart.eval()

    file_list = glob.glob(os.path.join(os.getcwd(), "output", "*.txt"))

    corpus = []

    for file_path in file_list:
        with open(file_path) as corpus:
            lines = corpus.readlines()
            lines = [line.replace("\n", "") for line in lines]

            print("[Before]")
            for i, line in enumerate(lines):
                print(f"({i + 1}): {line}")

            with torch.no_grad():
                preds = bart.sample(lines, beam=4, lenpen=2.0, no_repeat_ngram_size=2, temperature=0.9)
                print("\n[After]")
                for i, pred in enumerate(preds):
                    print(f"({i + 1}): {pred}")
© www.soinside.com 2019 - 2024. All rights reserved.