Python:写入文件时对齐输出(非打印)

2024-04-28 21:18:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个分析网络日志的程序。我将各种结果放入一个名为“output”的变量中,并在末尾将输出写入一个文本文件。以下只是一个例子:

output += "\nFiles and how many times they have been accessed: \n"
for key in accessedFiles.keys():
     output += key + "-> time(s) accessed is: " + "\t" + str(accessedFiles[key]) + " \n"

输出如下所示:

/paperarticles/Nov02-Bushswar.htm-> time(s) accessed is:    1 
/Documents/NinaSimone.htm-> time(s) accessed is:    1 
/cwi.css-> time(s) accessed is:     1

还有一些类似的问题涉及到print命令。我知道这将如何与f-string一起工作,但我的代码中没有使用print。另外,"\t"不起作用,因为字符串的长度不同。你知道我怎么能这样排列吗?以下为手工制作,仅用于可视化目的:

/paperarticles/Nov02-Bushswar.htm     time(s) accessed:   1 
/Documents/NinaSimone.htm             time(s) accessed:   1 
/cwi.css->                            time(s) accessed:   1

这是我向论坛提出的第一个问题。我希望我做的每件事都是对的。 非常感谢你的帮助。克里斯


Tags: keyoutputtimeiscssdocumentsprinthtm
2条回答

尝试使用格式化方法:

"Location: {0:20} Revision {1}".format(Location,Revision)

您必须根据标签的长度计算出每行的格式长度。用户行需要比位置行或地区行更宽的格式宽度

可以使用expandtabs指定tabstop,如下所示:

print ('Location:'+'10-10-10-10'+'\t'+ 'Revision: 1'.expandtabs(30))
print ('District: Tower'+'\t'+ 'Date: May 16, 2012'.expandtabs(30))

#Output:
Location:10-10-10-10          Revision: 1
District: Tower               Date: May 16, 2012

制表符(\t)只移动到下一个x字符的倍数(通常为8),因此键的长度将落在不同的制表位上,您需要某种方法来确定要在输出字符串中放置多少个\t

更好的选择是确定最长键的宽度,并在输出中将键字符串填充到该最大值

maxKeyLen = max(map(len,accessedFiles.keys()))
for key,files in accessedFiles.items():
    output += key.ljust(maxKeyLen)+f" -> time(s) accessed is: {files}\n"

相关问题 更多 >