gpt4 book ai didi

python - 获取类似 csv 的解析和行长度字节数?

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:42 25 4
gpt4 key购买 nike

我熟悉 csv Python 模块,并且相信它在我的情况下是必要的,因为我有一些包含定界符的字段(| 而不是 ,,但这无关紧要)在引号内。

但是,我还在寻找每个原始行的字节计数长度,拆分成列。我不能指望数据总是引用一列,而且我不知道 csv 是否/何时会去掉外部引号,所以我不认为(但可能是错误的)简单地加入我的定界符将重现原始行字符串(更少的 CRLF 字符)。意思是,我不肯定以下作品:

with open(fname) as fh:
reader = csv.reader(fh, delimiter="|")
for row in reader:
original = "|".join(row) ## maybe?

我已经尝试查看 csv 以查看其中是否有任何我可以为此目的使用/monkey-patch,但是因为 _csv.reader.so,我不知道怎么弄乱它。

如果我正在处理 XY 问题,我的最终目标是通读 CSV 文件,提取某些字段及其整体文件偏移量以创建一种查找索引。这样,稍后,当我有一个候选值列表时,我可以检查每个候选值的文件偏移量和那里的 seek(),而不是再次检查整个文件。作为规模的想法,我可能有 100k 个值来查找 10GB 的文件,因此重新读取文件 100k 次对我来说效率不高。我对 CSV 模块以外的其他建议持开放态度,但仍需要类似 csv 的智能解析行为。

编辑:不确定如何使它比标题和正文已经解释的更清楚 - 简单地 seek()-ing 在文件句柄上是不够的,因为我 需要将这些行解析为 csv 以便提取其他信息。

最佳答案

您不能将 _csv.reader 子类化,但可以将 csvfile 参数子类化到 csv.reader() > constructor只需要是一个“类文件对象”。这意味着您可以提供一个您自己的类的实例来进行一些预处理——例如记住最后一行读取的长度和文件偏移量。这是一个准确显示的实现。请注意,行长包括行尾字符。它还显示了在读取文件后如何存储和使用每行/行的偏移量。

import csv

class CSVInputFile(object):
""" File-like object. """
def __init__(self, file):
self.file = file
self.offset = None
self.linelen = None
def __iter__(self):
return self
def __next__(self):
offset = self.file.tell()
data = self.file.readline()
if not data:
raise StopIteration
self.offset = offset
self.linelen = len(data)
return data
next = __next__

offsets = [] # remember where each row starts
fname = 'unparsed.csv'
with open(fname) as fh:
csvfile = CSVInputFile(fh)
for row in csv.reader(csvfile, delimiter="|"):
print('offset: {}, linelen: {}, row: {}'.format(
csvfile.offset, csvfile.linelen, row)) # file offset and length of row
offsets.append(csvfile.offset) # remember where each row started

关于python - 获取类似 csv 的解析和行长度字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com