我正在使用 struct 来格式化固定分隔的 txt 文件。这是前两行:
Sat Jan 3 18:15:05 2009 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + 50.00000000
Fri Jan 9 02:54:25 2009 119b098e2e980a229e139a9ed01a469e518e6f26 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098 + 50.00000000
并使用以下代码将其转换为 csv:
import csv
import struct
fieldwidths = (-4, 24, -4, 40,-4,64,-1,1,25) # negative widths represent ignored padding fields
fmtstring = ' '.join('{}{}'.format(abs(fw), 'x' if fw < 0 else 's')
for fw in fieldwidths)
fieldstruct = struct.Struct(fmtstring)
parse = fieldstruct.unpack_from
c = csv.writer(open("/home/ulrich/Desktop/disertation/sample_parsed_blch1.csv", "wb"))
with open('/home/ulrich/Desktop/disertation/sample_parsed_blch2.txt') as f:
for line in f:
fields = parse(line)
c.writerow(fields)
它工作正常,因为它生成 csv,但我仍然收到此错误消息:
error: unpack_from requires a buffer of at least 167 bytes
此类错误可能是由文件末尾的额外字符引起的。众所周知,Windows 世界的一些编辑器会在文本文件末尾添加 Ctrl-Z。这是 MS/DOS 想要与 CP/M 保持兼容时的回忆。
您可以通过跳过较短的行轻松摆脱它:
for line in f:
if len(line) >= minsize # 100
fields = parse(line)
c.writerow(fields)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)