尘土与星辰 -1992|第139章|封装与对账|中文
天光泛白时,林尘醒了。不是自然醒,是左脚脚踝处一阵尖锐的痉挛把他拽回现实。肌肉不受控地抽搐,像有根筋在骨头缝里打结。他咬住下唇,没出声,慢慢把腿伸直,用手掌抵住小腿肚,顺着经络往下推。推了十几下,痉挛才勉强平息。堂屋的煤油灯早已熄灭,只有窗纸透进灰蓝色的晨光。
第139章 封装与对账
天光泛白时,林尘醒了。不是自然醒,是左脚脚踝处一阵尖锐的痉挛把他拽回现实。肌肉不受控地抽搐,像有根筋在骨头缝里打结。他咬住下唇,没出声,慢慢把腿伸直,用手掌抵住小腿肚,顺着经络往下推。推了十几下,痉挛才勉强平息。堂屋的煤油灯早已熄灭,只有窗纸透进灰蓝色的晨光。小满的呼吸声均匀。王桂英不在,估计去灶房生火熬粥了。
他摸过枕边的手机。屏幕亮起:06:12。距离下午三点,还有不到九个小时。
他掀开被子,右脚先落地,左脚悬空,借力站起。脚掌触地的那一刻,麻木感像一层厚茧裹着骨头,知觉是断的,但重量是实的。他走到水缸边,舀水洗脸。冷水激在脸上,脑子彻底清醒。账本摊在桌上,昨天的余额35.3元旁边,他添了一行:目标:V3.0封装。交付8000。对账。
七点二十,镇上的网吧刚开门。卷帘门拉起一半,他侧身挤进去。老板还在打哈欠,没看他。他走到最角落的机位,插上U盘。开机。Windows XP的启动音乐沉闷地响起。他打开记事本和Python环境。昨晚在脑子里跑过的逻辑,现在要一行行敲进现实。
class DataCleaner:
def __init__(self, filepath):
self.filepath = filepath
self.log = []
self.success_count = 0
self.skip_count = 0
他写得慢。不是不会,是怕错。网吧的键盘键帽磨损严重,回车键有点卡。他每敲完一个方法,就保存一次。封装不是炫技,是为了复用。V2.0是散装的脚本,跑完就扔。V3.0必须能记录日志,能对接Excel,能随时调出错误清单。他翻出随身带的硬壳笔记本,上面抄着xlrd的官方文档摘要。xlrd.open_workbook(),sheet.row_values()。他对照着敲。遇到不确定的参数,就切出浏览器,用拨号网络搜。网速慢,页面加载像蜗牛爬。他不等,直接看本地缓存的旧版手册,凭逻辑推断。参数传错,就报TypeError。他改。缩进不对,就报IndentationError。他调。
九点。日志模块写完。异常捕获层加好。他导入老赵发来的TXT源文件。运行。
命令行窗口滚动。[INFO] Processing line 1... [WARNING] Line 45: Encoding mismatch, replaced. [ERROR] Line 112: Missing delimiter, skipped.
进度条走到30%时,卡住了。不是死机,是内存溢出。网吧的机子只有256M内存,Python处理八千条带冗余字符的文本,堆栈爆了。他盯着屏幕。没慌。他关掉程序,把读取方式从一次性readlines()改成逐行迭代。加了一个buffer_size限制,每处理五百行就清空一次临时变量。重新运行。
进度条恢复滚动。风扇在机箱里嗡嗡作响。他靠在椅背上,左脚又开始隐隐发胀。他不能久坐。每隔四十分钟,他就站起来,扶着桌沿,把重心移到右腿,左脚尖点地,轻轻活动脚踝。网吧里烟雾缭绕,旁边几个青年在打传奇,喊杀声不断。他戴上耳机,没放音乐,只是为了隔绝噪音。
十一点半。脚本跑完。输出日志显示:Processed 8000 lines. Success: 7842. Skipped: 158. Errors: 0.
他打开生成的CSV。数据整齐。金额、日期、姓名、备注,字段对齐。跳过的158条,日志里记明了原因:全角半角混排、断行、乱码占位符。他手动核对了一遍日志。确认无误。
但还不够。老赵要的是能直接导入财务系统的表。他得把跳过的158条单独拎出来,做成“待复核清单”,附在交付包里。这是规矩。也是筹码。
他新建一个Excel文件。用脚本导出CSV再手动转格式,把异常数据列出来。每处理一条,脚底的麻木就往上窜一寸。汗从额角渗出来,滴在键盘上。他抽了张纸巾擦掉。没停。
十二点四十五。交付包打包完成。一个主数据表,一个异常清单,一个运行日志。总大小1.2MB。
他靠在椅背上,闭上眼。呼吸有些重。左腿已经不听使唤,像灌了水泥。他知道自己快到极限了。但交付不能等。他睁开眼,打开邮箱。附件上传。收件人:老赵。主题:8000条清洗数据_V3.0交付_附异常清单与结算说明。
邮件正文他打了三遍,删改两次。最后只留了最干瘪的几行:
赵总,数据已清洗完毕。
有效数据7842条,异常数据158条(见清单)。
V3.0脚本已按标准格式封装,后续同类数据可直接对接。
结算请按实际有效条数核算。如需调整清洗标准,请提前确认规则。
附件:data_cleaned_20100808.zip
点击发送。进度条走完。邮件已送达。
他关掉电脑。拔出U盘。起身时,左腿猛地一软,膝盖磕在桌腿上。闷响。旁边打游戏的青年回头看了他一眼。他没说话,扶着墙慢慢挪出网吧。
外面的日头正毒。柏油路面泛着白光。他走得很慢,右脚拖着左脚,一步一顿。汗水把衬衫后背浸透,贴在皮肤上。他不去擦。脑子里在算账。八千条。如果按老赵之前口头说的“一口价两百”,他这半天加一晚上的命,就值两百。但他在邮件里提了“按实际有效条数”。如果老赵认,按每条0.03元算,7842条就是235块。加上之前的35.3,能破两百七。够买药,够交下个月网费,够留点余粮。
如果不认呢?压价。或者拿“异常数据太多”说事,扣款。
他走到村口的老槐树下,坐下。树荫挡不住热浪,但能喘口气。他摸出手机。屏幕暗着。没有新消息。
他翻开账本。在目标后面划掉V3.0封装和交付8000。写下:等待对账。脚伤:左膝磕碰,肿胀。资金:35.3(待结算)。
风穿过树叶,沙沙响。远处传来拖拉机的突突声。他闭上眼,让心跳慢下来。技术交付只是第一步。商业的齿轮,现在才真正咬合。老赵不是做慈善的,他是生意人。生意人只看投入产出比和可控性。V3.0的日志和清单,就是可控性的证明。他给了标准,老赵就得按标准来。或者,老赵会提出新标准。
下午两点五十。手机震了一下。
他睁开眼。短信。老赵。 “数据收到了。跑了一遍,格式对。清单也看了。明天上午九点,县里老茶馆。带电脑来。当面结。顺便看个新活。”
林尘盯着那行字。老茶馆。当面结。新活。 没有压价。没有扯皮。直接约见。
他收起手机。撑着树干站起来。左腿还是麻,但骨头里的那根弦,绷得更紧了。去县里。要坐中巴。要走路。要带着电脑。要面对老赵的眼睛。要谈钱。要谈规则。
他拍了拍裤腿上的灰。转身往回走。脚步依旧慢,但方向明确。
堂屋的灯还没亮。王桂英在灶房切菜。刀落在砧板上,笃笃作响。小满在院子里追一只蜻蜓。
林尘推开门。把电脑包放在桌上。翻开账本。 日期:8月8日。 支出:网吧费4元。车费(预支)3元。 收入:0(明日结算)。 余额:28.3元。 脚伤:左膝磕碰。步态受限。 进度:V3.0交付。邮件已发。老赵约见。
他停下笔。看着“老赵约见”四个字。没有兴奋,只有计算。路费、时间成本、谈判底线、备用方案。他拿出一张白纸,开始列清单。
1. 带V3.0源码与运行演示。
2. 明确阶梯计价:1-5000条0.03,5000-10000条0.035。
3. 异常数据责任划分:源文件错误不扣款。
4. 结算周期:交付后48小时内。
写完。他把纸折好,塞进电脑包夹层。
窗外的天色渐渐暗下来。蝉鸣声歇了。风里带了点凉意。
他合上账本。吹灭台灯。
黑暗落下。左脚的痛感在寂静中重新浮现。但他没动。只是听着自己的呼吸。
明天。九点。老茶馆。电脑。规则。
路还长。但台阶已经铺好。下一步,得自己踩上去。
手机屏幕在枕头边又亮了一下。不是短信。是闹钟。他设的。提醒他检查电脑电量,备份数据。
他伸手按掉。闭上眼。
等待天亮。
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment