我写的第一个对象^_^! 打印表格 ( 更新了!Rev.02)
本帖最后由 Cool_Breeze 于 2020-8-22 14:57 编辑'''
@ 从一个大列表里面格式化打印子列表
@ 2020/08/22
@ BY Cool_Breeze
'''
#coding=utf-8
class printf:
def __init__(self, data, corner='+', head_tail='-', both_sides='|'):
'''
@ row_len 每一列数据最大长度的列表
'''
self.data = data
self.corner = corner
self.head_tail = head_tail
self.both_sides = both_sides
self.row_len = []
self.__count_row_len()
def __count_row_len(self):
'''
@ 计算每一列的长度
@ 将每一个元素转换为字符串
@ 按照第一个列表的长度来遍历所有列表,注意越界问题
'''
elements = len(self.data)
for line_number in range(len(self.data)):
if line_number == 0:
for index in range(elements):
if not isinstance(self.data, str):
self.data = str(self.data)
self.row_len = ]
else:
for index in range(elements):
if not isinstance(self.data, str):
self.data = str(self.data)
if self.row_len < len(self.data):
self.row_len = len(self.data)
def split_line(self):
'''
@ 格式行
@ 默认在每个元素两边各加上一个空格
'''
self.split_line_str = ''
for i in self.row_len:
self.split_line_str += (self.corner + self.head_tail * (i + 2))
self.split_line_str += self.corner + '\n'
print(self.split_line_str, end='')
return self.split_line_str
def data_line(self, title=True):
'''
@ 将字符串按格式整合
@ 是否存在标题行
@ title = True 将在第一行下面增加一行 split_line_str
'''
filling = ' '
L_sides = self.both_sides + filling
all_str = ''
for elements in self.data:
for nu,single in enumerate(elements):
temp_single_len = len(single)
if temp_single_len < self.row_len:
all_str += L_sides + single + filling * (self.row_len - temp_single_len + 1)
else:
all_str += L_sides + single + filling
all_str += self.both_sides + '\n'
if title:
all_str += self.split_line_str
title = False
print(all_str, end='')
return all_str
if __name__ == '__main__':
import csv
test = []
with open('test.csv') as f:
f = csv.reader(f)
for line in f:
test.append(line)
p = printf(test)
# 写入日志
with open('test.txt', 'w') as f:
f.writelines(p.split_line())
f.writelines(p.data_line())
f.writelines(p.split_line())
result:
+-----------+--------------+--------------+--------------+--------------+--------------+--------------+
| TimeStamp | TMON_0_RDIL0 | TMON_0_RDIL1 | TMON_0_RDIL2 | TMON_0_RDIL3 | TMON_0_RDIL4 | TMON_0_RDIL5 |
+-----------+--------------+--------------+--------------+--------------+--------------+--------------+
| 19:18.6 | 61 | 59.5 | 58.5 | 60.5 | 60.75 | 61.25 |
| 19:19.6 | 60.75 | 58.5 | 57.25 | 59.75 | 60 | 60.25 |
| 19:20.6 | 60.25 | 57.5 | 57 | 59.25 | 59.5 | 60.5 |
| 19:21.7 | 59.75 | 58 | 57.5 | 59.5 | 59.5 | 60.25 |
| 19:22.7 | 59.75 | 58 | 57.5 | 59.5 | 58.75 | 60 |
| 19:23.7 | 60 | 58 | 57.5 | 59.5 | 59.25 | 60.25 |
| 19:24.8 | 59.25 | 57.5 | 57.25 | 59 | 59 | 59.75 |
| 19:25.8 | 59 | 57.25 | 56.5 | 58.75 | 58.5 | 59.25 |
| 19:26.8 | 59.25 | 57.25 | 56.5 | 59 | 58.75 | 59.5 |
| 19:27.8 | 58.5 | 56 | 55.5 | 57.75 | 57.75 | 58.5 |
| 19:28.9 | 58.25 | 56 | 55.5 | 57.5 | 57.5 | 58.25 |
| 19:29.9 | 58.5 | 56.5 | 56 | 58 | 57.75 | 58.5 |
| 19:30.9 | 59.25 | 57.25 | 57 | 58.5 | 58.5 | 59.5 |
| 19:31.9 | 59 | 57.25 | 57 | 59.5 | 59.25 | 59.75 |
+-----------+--------------+--------------+--------------+--------------+--------------+--------------+
请按任意键继续. . . 本帖最后由 Cool_Breeze 于 2020-5-13 11:39 编辑
Rev.01
支持任意列数!
还不支持中文,中文字节不好弄!
@hrp
@_2_ @ wp231957
使用以下方法,可以更简单
print('{:.10s}'.format(str(123.1321))) Cool_Breeze 发表于 2020-5-11 09:14
BUG还有,想想怎么修复,
还想支持多列打印,不知道怎么做!
现在就支持2列数据
建议加点注释吧 ~ Twilight6 发表于 2020-5-11 09:28
建议加点注释吧 ~
好的!的确是乱的很。我是学了C过来学Python的,对Python还不是很熟悉,望大家多多指教! 我还以为是另一半…… _2_ 发表于 2020-5-11 11:14
我还以为是另一半……
还没有思路!{:5_99:} 本帖最后由 wp231957 于 2020-5-11 11:30 编辑
Cool_Breeze 发表于 2020-5-11 09:14
BUG还有,想想怎么修复,
还想支持多列打印,不知道怎么做!
现在就支持2列数据
想实现多行多列 你需要存储数据的东东
比如 文件,数组啥的这里建议你使用LIST+DICT模式存储数据 Cool_Breeze 发表于 2020-5-11 11:26
还没有思路!
girlFriend 或者 boyFriend…… _2_ 发表于 2020-5-11 11:37
girlFriend 或者 boyFriend……
l need boyFriend{:5_92:} wp231957 发表于 2020-5-11 11:29
想实现多行多列 你需要存储数据的东东
比如 文件,数组啥的这里建议你使用LIST+DICT模式存 ...
谢谢!你说的,我还没有接触到。我还在入门阶段{:10_266:} 楼主想把它做成轮子不 hrp 发表于 2020-5-11 13:43
楼主想把它做成轮子不
有这个打算,但是现在这个技术还不支持我能够搞这些,我还得学习! Cool_Breeze 发表于 2020-5-11 13:51
有这个打算,但是现在这个技术还不支持我能够搞这些,我还得学习!
最近我在写个小程序,本来也想顺便写个这样的小轮子,越构思越觉得复杂,超出能力范围了,想找个现成的用{:10_254:} Cool_Breeze 发表于 2020-5-11 11:55
l need boyFriend
我还没满 18 你不要这样 本帖最后由 Cool_Breeze 于 2020-5-11 16:14 编辑
hrp 发表于 2020-5-11 14:43
最近我在写个小程序,本来也想顺便写个这样的小轮子,越构思越觉得复杂,超出能力范围了,想找个现成的用 ...
我看看能不能搞成!
搞完这个可能我对面向对象编程有了进一步的了解! Cool_Breeze 发表于 2020-5-11 11:56
谢谢!你说的,我还没有接触到。我还在入门阶段
你可以试试用 pprint(这是个模块,你可能还没学,内置)或者参考 Prettytable(这也是个模块,第三方)的源码学习学习{:10_256:}{:10_254:} Cool_Breeze 发表于 2020-5-11 15:03
我看看能不能搞成!
搞完这个可能我对面向对象编程有了进一步的了解!
加油{:10_279:} _2_ 发表于 2020-5-11 16:35
你可以试试用 pprint(这是个模块,你可能还没学,内置)或者参考 Prettytable(这也是个模块,第三方)的源 ...
好的! hrp 发表于 2020-5-11 16:53
加油
更新了哦! Cool_Breeze 发表于 2020-5-13 10:15
更新了哦!
楼主这个模块有github或者gitee么,我去给你点星星{:10_250:}周末研究下怎么用{:10_250:}
页:
[1]
2