Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的文件流处理_Python - Fatal编程技术网

python中的文件流处理

python中的文件流处理,python,Python,我有一个数据文件,其中每个“行”由\n\n\n分隔。我的解决方案是通过首先对文件进行slurp,然后拆分行来隔离这些行: for row in slurped_file.split('\n\n\n'): ... 在Python 2.7.9中,是否有一种类似于“awk-like”的方法可以将文件解析为流,并根据给定的字符串值拆分行?谢谢。所以标准库中没有这样的东西。但我们可以制作一个自定义生成器来迭代这些记录: def chunk_iterator(iterable): chu

我有一个数据文件,其中每个“行”由
\n\n\n
分隔。我的解决方案是通过首先对文件进行slurp,然后拆分行来隔离这些行:

 for row in slurped_file.split('\n\n\n'):
    ...

在Python 2.7.9中,是否有一种类似于“
awk
-like”的方法可以将文件解析为流,并根据给定的字符串值拆分行?谢谢。

所以标准库中没有这样的东西。但我们可以制作一个自定义生成器来迭代这些记录:

def chunk_iterator(iterable):
    chunk = []
    empty_lines = 0
    for line in iterable:
        chunk.append(line)
        if line == '\n':
            empty_lines += 1
            if empty_lines == 2:
                yield ''.join(chunk[:-2])
                empty_lines, chunk = 0, []
        else:
            empty_lines = 0

    yield ''.join(chunk)
用作:

with open('filename') as f:
    for chunk in chunk_iterator(f):
        ...

这将使用CPython中用C编写的文件的每行迭代,因此比常规记录分隔符解决方案更快。

因此标准库中没有这样的东西。但我们可以制作一个自定义生成器来迭代这些记录:

def chunk_iterator(iterable):
    chunk = []
    empty_lines = 0
    for line in iterable:
        chunk.append(line)
        if line == '\n':
            empty_lines += 1
            if empty_lines == 2:
                yield ''.join(chunk[:-2])
                empty_lines, chunk = 0, []
        else:
            empty_lines = 0

    yield ''.join(chunk)
用作:

with open('filename') as f:
    for chunk in chunk_iterator(f):
        ...

这将使用CPython中用C编写的文件的每行迭代,因此比常规记录分隔符解决方案更快。

因此标准库中没有这样的东西。但我们可以制作一个自定义生成器来迭代这些记录:

def chunk_iterator(iterable):
    chunk = []
    empty_lines = 0
    for line in iterable:
        chunk.append(line)
        if line == '\n':
            empty_lines += 1
            if empty_lines == 2:
                yield ''.join(chunk[:-2])
                empty_lines, chunk = 0, []
        else:
            empty_lines = 0

    yield ''.join(chunk)
用作:

with open('filename') as f:
    for chunk in chunk_iterator(f):
        ...

这将使用CPython中用C编写的文件的每行迭代,因此比常规记录分隔符解决方案更快。

因此标准库中没有这样的东西。但我们可以制作一个自定义生成器来迭代这些记录:

def chunk_iterator(iterable):
    chunk = []
    empty_lines = 0
    for line in iterable:
        chunk.append(line)
        if line == '\n':
            empty_lines += 1
            if empty_lines == 2:
                yield ''.join(chunk[:-2])
                empty_lines, chunk = 0, []
        else:
            empty_lines = 0

    yield ''.join(chunk)
用作:

with open('filename') as f:
    for chunk in chunk_iterator(f):
        ...

这将使用CPython中用C编写的文件的每行迭代,因此比一般的记录分隔符解决方案更快。

是否有特定原因
file.read(num_bytes)
方法不适合您?只是想更好地理解需求。这似乎是一个基于将字节读入缓冲区并生成拆分字符串的惰性生成器的理想选择;另请参阅,但还有一个更简单的解决方法。
\n\n\n
分隔大数据块(可以放入内存,但我事先不知道这些数据块的大小)。我认为这真的意味着两行空行?是的,在使用
od-c
解析时连续三行馈送。
文件读取是否有具体原因(字节数)
方法不适用于您?只是试图更好地理解需求。它似乎是一个基于将字节读入缓冲区并生成拆分字符串的惰性生成器,非常适合于此。有一个方法可以将此类内容添加到Python标准库中;另请参阅,但也有一个更简单的解决方法。
\n\n
delim它包含大量数据(可以放入内存,但我事先不知道这些数据块的大小)。我认为这真的意味着有两行空行?是的,当使用
od-c
进行解析时,有三个连续的换行符。
file.read(num_bytes)是否有具体原因
方法不适用于您?只是试图更好地理解需求。它似乎是一个基于将字节读入缓冲区并生成拆分字符串的惰性生成器,非常适合于此。有一个方法可以将此类内容添加到Python标准库中;另请参阅,但也有一个更简单的解决方法。
\n\n
delim它包含大量数据(可以放入内存,但我事先不知道这些数据块的大小)。我认为这真的意味着有两行空行?是的,当使用
od-c
进行解析时,有三个连续的换行符。
file.read(num_bytes)是否有具体原因
方法不适用于您?只是试图更好地理解需求。它似乎是一个基于将字节读入缓冲区并生成拆分字符串的惰性生成器,非常适合于此。有一个方法可以将此类内容添加到Python标准库中;另请参阅,但也有一个更简单的解决方法。
\n\n
delim它包含大量的数据(可以放入内存中,但我事先不知道这些数据块的大小)。我认为这真的意味着两行空行?是的,当使用
od-c
进行解析时,会连续输入三行。