对文件对象而不是字符串运行regex

2024-06-28 14:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个很好的sql-to-csv表达式(见下文),它可以处理mysqldump数据的格式。你知道吗

但是,我想浏览非常大的文件,可能太大而无法放入内存。输入可以是[gb]压缩的,并且不包含换行符。理想情况下,我希望能够处理从网络位置读入的输入数据,而不是先下载然后从磁盘上读取文件。你知道吗

如何在像对象这样的文件上运行regex或使用分块读取?你知道吗

def sql2csv(buf):
  rowmatcher = re.compile(r"""
    (?<=\()
      (?:
        (?:
          -?\d+(?:\.\d+)?
          |NULL
          |'(?:[^'\\]|\\')*'
        )
        (?:,|(?=\)))
      )+
    (?=\)[,;])
    """, re.X)

  return (
      [r.decode('string_escape').decode('utf8') for r in row]
      for row in csv.reader(
          (x.group(0) for x in rowmatcher.finditer(buf)),
          quotechar="'", escapechar='\\', doublequote=False))

Tags: 文件csvto数据inreforsql
1条回答
网友
1楼 · 发布于 2024-06-28 14:34:02

像这样的可能?你知道吗

#pseudocode

buf = read(1024)
while True:
   if re.match(regexp, buf):
        buf = re.sub(regexp, do_stuff, buf)
   else:
        buf += read(1024)

其中do_stuff执行作业并返回'',从而从缓冲区中删除已处理的内容

相关问题 更多 >