但是,在分割成列之前,我还在寻找每个原始行的字节数长度.我不能指望数据总是引用一个列,我不知道是否/当csv将剥离外部引号,所以我不认为(但可能是错误的)只是加入我的分隔符将重现原始行字符串(少CRLF字符).意思是,我不肯定以下作品:
with open(f@R_502_6889@) 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的智能解析行为.
编辑:不知道如何使标题和正文已经解释清楚 – 只是寻找() – 文件句柄是不够的,因为我还需要将行解析为csv,以便提取其他信息.
解决方法 您不能将_csv.reader子类化,但csv.reader() constructor的csvfile参数只能是“类文件对象”.这意味着您可以提供自己的类的实例来执行一些预处理 – 例如记住最后一行读取的长度和文件偏移量.这是一个显示确切的实现.请注意,行长度不包括行尾字符.它还显示了在读取文件后如何存储和使用每行/行的偏移量.import csvclass 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 startsf@R_502_6889@ = 'unparsed.csv'with open(f@R_502_6889@) 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的解析和行长字节数?全部内容,希望文章能够帮你解决python – 获取类似csv的解析和行长字节数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)