鱼C论坛

 找回密码
 立即注册
查看: 1841|回复: 26

[作品展示] 我写的第一个对象^_^! 打印表格 ( 更新了!Rev.02)

[复制链接]
发表于 2020-5-11 09:04:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[0])
        for line_number in range(len(self.data)):
            if line_number == 0:
                for index in range(elements):
                    if not isinstance(self.data[line_number][index], str):
                        self.data[line_number][index] = str(self.data[line_number][index])
                self.row_len = [len(string) for string in self.data[line_number]]
            else:
                for index in range(elements):
                    if not isinstance(self.data[line_number][index], str):
                        self.data[line_number][index] = str(self.data[line_number][index])
                    if self.row_len[index] < len(self.data[line_number][index]):
                       self.row_len[index] = len(self.data[line_number][index])

    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[nu]:
                    all_str += L_sides + single + filling * (self.row_len[nu] - 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        |
+-----------+--------------+--------------+--------------+--------------+--------------+--------------+

请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-11 09:14:31 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-5-13 11:39 编辑

Rev.01
支持任意列数!
还不支持中文,中文字节不好弄!
@hrp
@_2_ @ wp231957


使用以下方法,可以更简单
print('{:.10s}'.format(str(123.1321)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 09:28:13 | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 09:14
BUG还有,想想怎么修复,
还想支持多列打印,不知道怎么做!
现在就支持2列数据

建议加点注释吧 ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 09:36:36 | 显示全部楼层
Twilight6 发表于 2020-5-11 09:28
建议加点注释吧 ~

好的!的确是乱的很。我是学了C过来学Python的,对Python还不是很熟悉,望大家多多指教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 11:14:57 From FishC Mobile | 显示全部楼层
我还以为是另一半……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 11:26:44 | 显示全部楼层
_2_ 发表于 2020-5-11 11:14
我还以为是另一半……

还没有思路!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 11:29:09 | 显示全部楼层
本帖最后由 wp231957 于 2020-5-11 11:30 编辑
Cool_Breeze 发表于 2020-5-11 09:14
BUG还有,想想怎么修复,
还想支持多列打印,不知道怎么做!
现在就支持2列数据


想实现多行多列   你需要存储数据的东东

比如   文件,数组  啥的  这里建议你使用LIST+DICT模式存储数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 11:37:09 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 11:26
还没有思路!

girlFriend 或者 boyFriend……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 11:55:25 | 显示全部楼层
_2_ 发表于 2020-5-11 11:37
girlFriend 或者 boyFriend……

l need boyFriend
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 11:56:33 | 显示全部楼层
wp231957 发表于 2020-5-11 11:29
想实现多行多列   你需要存储数据的东东

比如   文件,数组  啥的  这里建议你使用LIST+DICT模式存 ...

谢谢!你说的,我还没有接触到。我还在入门阶段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 13:43:23 From FishC Mobile | 显示全部楼层
楼主想把它做成轮子不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 13:51:47 | 显示全部楼层
hrp 发表于 2020-5-11 13:43
楼主想把它做成轮子不

有这个打算,但是现在这个技术还不支持我能够搞这些,我还得学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 14:43:17 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 13:51
有这个打算,但是现在这个技术还不支持我能够搞这些,我还得学习!

最近我在写个小程序,本来也想顺便写个这样的小轮子,越构思越觉得复杂,超出能力范围了,想找个现成的用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 14:58:03 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 11:55
l need boyFriend

我还没满 18 你不要这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 15:03:58 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-5-11 16:14 编辑
hrp 发表于 2020-5-11 14:43
最近我在写个小程序,本来也想顺便写个这样的小轮子,越构思越觉得复杂,超出能力范围了,想找个现成的用 ...


我看看能不能搞成!
搞完这个可能我对面向对象编程有了进一步的了解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 16:35:41 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 11:56
谢谢!你说的,我还没有接触到。我还在入门阶段

你可以试试用 pprint(这是个模块,你可能还没学,内置)或者参考 Prettytable(这也是个模块,第三方)的源码学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 16:53:18 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-11 15:03
我看看能不能搞成!
搞完这个可能我对面向对象编程有了进一步的了解!

加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 17:41:11 | 显示全部楼层
_2_ 发表于 2020-5-11 16:35
你可以试试用 pprint(这是个模块,你可能还没学,内置)或者参考 Prettytable(这也是个模块,第三方)的源 ...

好的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 10:15:41 | 显示全部楼层

更新了哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 10:44:25 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-13 10:15
更新了哦!

楼主这个模块有github或者gitee么,我去给你点星星周末研究下怎么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表