如何实现每列对齐打印数据呢?
我的代码是这样的:fieldName=("商品id","图书名称","出版社","价格")
bookData = (
{"id": "1", "bookName": "资本论(第一卷)",
"publisher": "人民出版社", "Price": "90"},
{"id": "2", "bookName": "中华人民共和国简史",
"publisher": "上海人民出版社", "Price": "40"},
{"id": "3", "bookName": "百年大党正年轻",
"publisher": "东方出版社", "Price": "68"},
{"id": "4", "bookName": "零基础学Python3.0(全彩版)",
"publisher": "吉林大学出版社", "Price": "79.80"},
{"id": "5", "bookName": "给Python点颜色 青少年学编程",
"publisher": "人民邮电出版社", "Price": "59.80"},
)
for each in bookData:
print("{:^10}{:^10}{:^10}{:^10}".format((each['id']),(each['bookName']),(each['publisher']),(each["Price"])))
但是结果是这样的:
1 资本论(第一卷) 人民出版社 902 中华人民共和国简史上海人民出版社 403 百年大党正年轻 东方出版社 684 零基础学Python3.0(全彩版) 吉林大学出版社 79.805 给Python点颜色 青少年学编程 人民邮电出版社 59.80
1 资本论(第一卷) 人民出版社 90
2 中华人民共和国简史上海人民出版社 40
3 百年大党正年轻 东方出版社 68
4 零基础学Python3.0(全彩版) 吉林大学出版社 79.80
5 给Python点颜色 青少年学编程 人民邮电出版社 59.80 首先,你给出的宽度太小,尝试增大宽度:
for each in bookData:
print("{:^5}{:^20}{:^15}{:^6}".format(each['id'],each['bookName'],each['publisher'],each["Price"]))
其次,一个中文字符与一个英文字符显示出来的 宽度/大小 不同,中文字符明显要 宽/大 ,这就注定了不可能简单地让它对的非常齐。
1 资本论(第一卷) 人民出版社 90
2 中华人民共和国简史 上海人民出版社 40
3 百年大党正年轻 东方出版社 68
4 零基础学Python3.0(全彩版) 吉林大学出版社 79.80
5 给Python点颜色 青少年学编程 人民邮电出版社 59.80
这就是修改后的效果,对的齐了一些。
但如果追求完美的话,建议将英文字母、标点、空格全部替换为相应的全角字符:
fieldName=("商品id","图书名称","出版社","价格")
bookData = (
{"id": "1", "bookName": "资本论(第一卷)",
"publisher": "人民出版社", "Price": "90"},
{"id": "2", "bookName": "中华人民共和国简史",
"publisher": "上海人民出版社", "Price": "40"},
{"id": "3", "bookName": "百年大党正年轻",
"publisher": "东方出版社", "Price": "68"},
{"id": "4", "bookName": "零基础学Python3.0(全彩版)",
"publisher": "吉林大学出版社", "Price": "79.80"},
{"id": "5", "bookName": "给Python点颜色 青少年学编程",
"publisher": "人民邮电出版社", "Price": "59.80"},
)
for each in bookData:
print("{:^5}{:^20}{:^15}{:^6}".format(each['id'],each['bookName'],each['publisher'],each["Price"]).replace(' ',' '))
你也可以利用第三方库 wcwidth 来计算字符串的实际显示宽度,然后根据缺失的宽度手动填充空格。示例代码:
import wcwidth
def adjust_text(text, total_width, align='center'):
# 计算实际显示宽度
actual_width = sum(wcwidth.wcwidth(c) for c in text)
# 根据对齐方式计算左右填充空格数
if total_width <= actual_width:
return text
pad_total = total_width - actual_width
if align == 'left':
return text + ' ' * pad_total
elif align == 'right':
return ' ' * pad_total + text
else:# center
left_pad = pad_total // 2
right_pad = pad_total - left_pad
return ' ' * left_pad + text + ' ' * right_pad
# 示例:为每列设置 desired_width
widths =
print("".join(adjust_text(fieldName, widths, align='center') for i in range(len(fieldName))))
for each in bookData:
print("".join(adjust_text(each, widths, align='center') for i, k in enumerate(["id", "bookName", "publisher", "Price"])))
页:
[1]