繁体   English   中英

如何制作自定义打印格式?

[英]How to make a custom print format?

我想以自定义表格格式将一些变量打印到文件中,并且能够添加到表格中而无需再次添加标题并保留以前的信息。 这是我的代码:

import time as r
data = r.strftime("%d %m %Y %I %M")
with open('myfile.txt','a') as f:
    f.write(data + '\n')

这是文本文件中的输出:

01 07 2022 01 19

现在这是我想要的输出:

_________________________________
|Day |Month |Year |Hour |Minute |
|-------------------------------|
|01  |07    |2022 |01   |19     |
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|

而且我希望有能力,如果我再次运行该文件,它将添加新的输出,它看起来像这样:

_________________________________
|Day |Month |Year |Hour |Minute |
|-------------------------------|
|01  |07    |2022 |01   |19     |
|===============================|
|01  |07    |2022 |02   |10     |
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|

我知道这是一个荒谬的帖子,但有人知道怎么做吗? 谢谢。

给你两个答案...

  1. 使用 Pypi 为打印表格而设计的库。
  2. 使用字符串格式自己构建

我强烈推荐第一个,因为使用该库比为几乎相同的结果构建自定义函数更容易。 我过去使用过的一些可以推荐:

检查项目,看看它是否可以使用。

对于第二个选项,您可以通过巧妙地使用填充来自己构建它。

这是一个教程-> https://www.geeksforgeeks.org/add-padding-to-a-string-in-python/

我说要聪明,因为如果你想让事情保持对称,你必须找到长度最长的字符串。

使用基本的字符串打印和字符串格式化,您可以获得结果。

首先,正如您所做的那样,您必须在文件中插入新日期:

import time as r
data = r.strftime("%d %m %Y %I %M")
with open('myfile.txt','a') as f:
    f.write(data + '\n')

然后,您必须获取您在文件中注册的所有日期:

with open('myfile.txt', 'r') as file:
    data = file.readlines()

data = [string[:-1] for string in data] # To delete the '\n'

最后是打印部分,用for循环获取所有元素:

print('_________________________________')
print('|Day |Month |Year |Hour |Minute |')
print('|-------------------------------|')

for elements in data:
    element = elements.split()
    print(f'|{element[0]}  |{element[1]}    |{element[2]} |{element[3]}   | 
            {element[4]}     |')
    if elements != data[-1]:
        print("|===============================|")
    else:
        print("|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|")

注意:您可以使用 pprint 等库: Pypi 官方文档中的 PPrint 描述

您可以使用表格库。

第一次调用fun函数将创建表头,添加第一个数据并将结束行填充 '^'*31。 为了确保它确实是第一次调用,并且不会在每次后续调用时重新创建标头,有if块。

当第一个调用以读取模式'r'打开time.txt时,所有其他调用以'r+'模式打开它,该模式打开文件以进行读取和写入。 当文件被读取并且它的所有内容都被保存到saved时(所有内容,除了结束行),解析器的光标移动到打开文件的开头,以便可以用尾随的新数据重写它结束线。

def fun():
    import time
    import os.path
    seperator='|'+'-'*31+'|\n'
    end = '|'+'^'*31+'|'
    if not os.path.isfile('time.txt'): #checking if the file exist
        with open('time.txt','w') as f:
            header= '_'*32+'\n'+\
                    '|Day |Month |Year |Hour |Minute |\n'
            t=time.localtime()
            data = (f'|{t[2]:<4}|{t[1]:<6}|{t[0]:<5}'
                    f'|{t[3]:<5}|{t[4]:<7}|\n')
            f.write(header+seperator+data+end)
    else:
        with open('time.txt','r+') as f:
            saved=f.readlines()[:-1] #saving all, but the end line
            f.seek(0) #set the cursor to the start of the file
            t=time.localtime()
            data = (f'|{t[2]:<4}|{t[1]:<6}|{t[0]:<5}'
                    f'|{t[3]:<5}|{t[4]:<7}|\n')
            f.writelines(saved+[seperator,data,end])            

它可能不是满足您需求的理想选择......而且我不敢说代码是完美的。

注意:如果 'time.txt' 已经存在,但为空或/和没有标题,则不会创建标题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM