Python 板


LINE

获取数值可以用re.split简单达成 填入文字本来想要用f-string加上\t间隔来排版 发现国字的全形和数字的半形在同一栏时,很难让栏位对齐 所以做了一点细部的调整 大致的流程是获得文本list之後,对需要修改的行位做修改,再全部黏起来('\n'.join)覆写回去 Before: https://i.imgur.com/CQDMUVN.png After: https://i.imgur.com/z8ZfxIW.png 程式码: import re #设定文字档路径 txt_filepath='path/to/data.txt' #定义动作:在文字行的串列中获取两个虚线的行索引 def GetDashlineRowIndexes(line_list): i_dashline_row1=None #第一条虚线的行索引 i_dashline_row2=None #第二条虚线的行索引 #逐行搜寻 for i_row,line_text in enumerate(line_list): #判定有10个以上的虚线字元即为虚线行 if '-'*10 in line_text: if not i_dashline_row1: i_dashline_row1=i_row else: i_dashline_row2=i_row break #若两条的虚线都有找到 if all([i_dashline_row1,i_dashline_row2]): return i_dashline_row1, i_dashline_row2 #若两行的虚线有其中一条未找到 else: raise ValueError('文字档应至少包含两个虚线行') #定义动作:将单行的数据文字串列输出为单行等宽栏的字串 def RowDataListToOneLine(row_data_list): #设定固定栏宽 space_len=8 #生成新的单行文字内容 new_line='' for row_data in row_data_list: #计算全形字的数量 num_of_fullwidth_chr=sum(ord(s)>126 for s in row_data) #使用f-string排版,设定向右对齐(根据全形字的数量去教准) new_line+=f'{row_data:>{space_len - num_of_fullwidth_chr}}\t' return new_line #读取所有txt文字 with open(txt_filepath,'r',encoding='utf-8') as f: text=f.read() #分割每一行内容做成list line_list=text.split('\n') #获取两个虚线的行索引值 i_dashline_row1, i_dashline_row2 = GetDashlineRowIndexes(line_list) #处理标题列文字行,先获取标题列的行索引 i_header_row=i_dashline_row1 - 1 #获取单行标题列文字并分割为串列 header_line=line_list[i_header_row] row_data_list=re.split(r'\s+',header_line.lstrip()) #将原标题列字串替换为等宽栏的字串 line_list[i_header_row]=RowDataListToOneLine(row_data_list) #处理数据列文字行 for i_row in range(i_dashline_row1+1, i_dashline_row2): #获取单行的数据文字串列 row_data_list=re.split(r'\s+',line_list[i_row].lstrip()) #取左边10栏 row_data_list=row_data_list[:10] #取得各项数值 W,X,Y,Z,W_w,X_w,Y_w,Z_w=(float(data) for data in row_data_list[2:]) #计算均重,输出文字格式:取至两个小数点并向右对齐(若分母为零则显示0.00) W_avg=f'{W_w/W:>.2f}' if W else '0.00' X_avg=f'{X_w/X:>.2f}' if X else '0.00' Y_avg=f'{Y_w/Y:>.2f}' if Y else '0.00' Z_avg=f'{Z_w/Z:>.2f}' if Z else '0.00' #将原数据列字串替换为等宽栏的字串 line_list[i_row]=RowDataListToOneLine(row_data_list + [W_avg,X_avg,Y_avg,Z_avg]) #重新组成text内容 new_text='\n'.join(line_list) #覆写档案 with open(txt_filepath,'w',encoding='utf-8') as f: f.write(new_text) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.6.172 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1581057249.A.E3A.html ※ 编辑: papple23g (61.216.6.172 台湾), 02/07/2020 14:41:13
1F:推 billdarkest: 感谢 觉得比我想像中的还要困难 晚上再慢慢消化吸收 02/07 15:29
2F:→ billdarkest: 谢谢! 02/07 15:29
3F:推 zorogto: 推 基础范本 02/13 07:37
4F:推 cuteSquirrel: push 02/13 16:49







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP