当前位置: 首页 > 面试题库 >

如何从python中的文件中读取由自定义分隔符终止的记录?

包永新
2023-03-14
问题内容

我想for line in file在python中做的一种方式,其中将行尾重新定义为我想要的任何字符串。换句话说,我想从文件而不是行中读取记录。我希望它与阅读台词一样快捷方便。

这是等效于设置perl的$/输入记录分隔符或Scanner在java中使用的python 。这不一定必须使用for line in file(特别是,迭代器可能不是文件对象)。只是一种等效方法,可以避免将太多数据读入内存。

另请参阅: 添加对使用任意分隔符读取记录的支持,并将其添加到标准IO堆栈中


问题答案:

Python 2.xfile对象或Python 3.3io类中没有任何内容可让您为指定自定义分隔符readline。(for line in file最终使用与相同的代码readline。)

但是,自己构建它很容易。例如:

def delimited(file, delimiter='\n', bufsize=4096):
    buf = ''
    while True:
        newbuf = file.read(bufsize)
        if not newbuf:
            yield buf
            return
        buf += newbuf
        lines = buf.split(delimiter)
        for line in lines[:-1]:
            yield line
        buf = lines[-1]

这是一个愚蠢的例子:

>>> s = io.StringIO('abcZZZdefZZZghiZZZjklZZZmnoZZZpqr')
>>> d = delimited(s, 'ZZZ', bufsize=2)
>>> list(d)
['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr']

如果您想同时使用二进制文件和文本文件,尤其是在3.x中,则比较麻烦。但是,如果只需要为一种或另一种(以及一种或另一种语言)工作,则可以忽略它。

同样,如果您使用的是Python 3.x(或ioPython
2.x中的对象),并且想要利用已经维护在其中的缓冲区,BufferedIOBase而不是仅仅将缓冲区放在缓冲区之上,那棘手的。这些io文档的确说明了如何做所有事情……但是我不知道任何简单的示例,因此您实际上必须至少阅读该页面的一半,然后略过其余部分。(当然,您可以直接使用原始文件…,但是如果您要查找unicode分隔符,则不能使用…)



 类似资料:
  • 问题内容: 我正在用Java编写CSV导出器,该导出器应遵守用户的自定义设置,尤其是用作分隔符的“列表分隔符”。 在Windows中,可以在 我不了解其他操作系统,但是我很确定您也可以在其他操作系统上进行更改。 将自定义设置从操作系统转换为Java的最佳方法是什么?我在Eclipse RCP环境中,因此,如果有可用的东西,我可能会使用与RCP相关的解决方案。 问题答案: 从这个答案的评论: 我 必

  • 我想用Apache Spark读入具有以下结构的文件。 csv太大了,不能使用熊猫,因为读取这个文件需要很长时间。有什么方法类似于 多谢!

  • 问题内容: 我有一种情况,我必须解析来自不同来源的CSV文件,解析代码非常简单明了。 我的问题来自CSV分隔符,我有许多不同的格式,有时是有时是 有什么方法可以在解析文件之前确定定界符 问题答案: univocity-parsers支持自动检测定界符(也包括行尾和引号)。只需使用它而不是与您的代码作斗争: 免责声明:我是该库的作者,并且确保确保涵盖了各种极端情况。它是开源且免费的(Apache 2

  • 我在使用Pandas读取选项卡分隔的文件时遇到问题。 所有单元格值都有双引号,但对于某些行,有一个额外的双引号打断了整个过程。例如: 我得到的错误是:错误标记数据。C错误:第8355行预期有31个字段,SAW58 我使用的代码是: 它适用于其余文件,但不适用于出现额外双引号的文件。

  • 问题内容: 我不是在谈论特定的行号,因为我正在读取具有相同格式但长度不同的多个文件。 说我有这个文本文件: 我希望你知道我的意思。我正在考虑遍历文件,然后使用正则表达式搜索以找到“开始”和“结束”的行号,然后使用线缓存从开始行读取到结束行。但是如何获得行号?我可以使用什么功能? 问题答案: 如果您只想要和之间的文本块,则可以执行以下操作: 实际上,您不需要操纵行号即可读取开始和结束标记之间的数据。

  • 问题内容: 给定一个大文件(数百MB),我将如何使用Python快速读取文件中特定起始索引和结束索引之间的内容? 本质上,我正在寻找一种更有效的方法: 问题答案: 您可以将文件放入文件,然后从那里读取一定数量。Seek允许您获取文件中的特定偏移量,然后可以将读取限制为该范围内的字节数。 那只会读取您要查找的数据。