Skip to main content
 首页 » 编程设计

python之错误 : unpack_from requires a buffer

2025年05月04日27kenshinobiy

我正在使用 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)