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



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

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     |
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|

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

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'已经存在,但为空或/and没有头文件,则不会创建头文件。

给你两个答案…

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

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

  • https://pypi.org/project/prettytable/
  • https://pypi.org/project/tabulate/

检查项目,看看是否有你可以使用的东西。

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

这里有一个教程->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("|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|")

注意:您可以使用Pypi官方文档

中的pprint: pprint描述等库

您可以使用表格库。

相关内容

  • 没有找到相关文章

最新更新