Python 制表未正确写入文本文件

问题描述

我试图将一个简单的列表制表到一个使用 tabulate() 格式化的文本文件中,fancy_grid 格式是我想要的,它在控制台中打印正常,但是在写入文本文件时,我得到下面的错误删除参数 tablefmt='fancy_grid' 使其编写一个简单的表,但这不是我想要的。我也尝试过使用 docx 格式,但仍然出现相同的错误

这是在 Windows 环境中。

代码

from tabulate import tabulate

l = [['{:<118}.'.format("Hassan"),21,"LUMS"],["Ali",22,"FAST"],["Ahmed",23,"UET"]]
table = tabulate(l,headers=['Name','Age','University'],tablefmt='fancy_grid',showindex="always")

with open("C:\\Users\\John\\Desktop\\kaita.txt","w") as outf:
    outf.write(table)
os.startfile("C:\\Users\\John\\Desktop\\kaita.txt","print")

错误

Traceback (most recent call last):
  File "E:/Developement/Desktop Applications/GuiWithWx/Learn/Teach/runpython.py",line 160,in <module>
    outf.write(table)
  File "C:\Python\lib\encodings\cp1252.py",line 19,in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-150: character maps to <undefined>

解决方法

我在linux下运行它。它有效。

enter image description here

我认为问题不在于tabulate,而在于写入文件

您可以尝试使用 utf-8 文件格式保存文件:

import io
from tabulate import tabulate

l = [['{:<118}.'.format("Hassan"),21,"LUMS"],["Ali",22,"FAST"],["Ahmed",23,"UET"]]
table = tabulate(l,headers=['Name','Age','University'],tablefmt='fancy_grid',showindex="always")

with io.open("C:\\Users\\John\\Desktop\\kaita.txt","w",encoding="utf-8") as outf:
    outf.write(table)

os.startfile("C:\\Users\\John\\Desktop\\kaita.txt","print")