【问题标题】:How to read a sequence of files as one file (fileinput lacks read)?如何将一系列文件作为一个文件读取(文件输入缺少读取)?
【发布时间】:2021-08-05 19:10:50
【问题描述】:

我需要读取一系列文件,fileinput 似乎正是需要的,但后来我意识到它缺少 read 方法。

  1. 执行此操作的规范方法(如果有)是什么? (显式连接会很浪费。)
  2. 是否存在fileinput 不支持read 的已知技术或安全原因?

This related question 不是重复的。

【问题讨论】:

  • 你想对read的数据做什么?如果你想要一个字符串,那么只需使用例如''.join(x for x in f) 在文件输入对象上。或者做list(f) 相当于readlines()
  • fileimput 缺少 read(),因为它“实现了一个帮助类和函数,以快速在标准输入或文件列表上编写循环”——注意“编写循环”。此外,因为它支持多个输入文件,一次将其中一个或所有文件的内容读入内存几乎肯定不是设计目标(它会使它的许多方法——比如filename()lineno()——变得毫无意义)。
  • @match 我想将它传递给另一个应用程序,该应用程序需要一个类似文件的对象。 (例如,它可能会调用read。)
  • @KennyOstrom 好链接。

标签: python io


【解决方案1】:

由于它们将一次全部读入内存,因此您可以使用 io.StringIO

import io


class Filelike:
    def __init__(self, filenames):
        self.data = io.StringIO()
        for filename in filenames:
            with open(filename) as file:
                self.data.write(file.read())

        self.data.seek(0)  # Rewind.

    def read(self):
        return self.data.getvalue()


if __name__ == '__main__':

    filenames = ['file1.txt', 'file2.txt', ...]
    filelike = Filelike(filenames)

    # process lines
    for line in filelike.read().splitlines():
        print(repr(line))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多