首页 > 解决方案 > 将元组列表写入 txt 文件时对齐文本

问题描述

我正在尝试将元组列表写入 txt 文件并将其与左侧对齐。(需要用制表符分隔)这是元组列表:

list1 = [(1, "Banana", "Yellow"), (2 , "Apple", "Red"), (3, "Carrot", "Orange")]

这是我写的代码:

def write_fruit(list1,new_file):
if not isinstance(list1, list):
    raise ValueError("First input must be a list.")
header = "Num Fruit Color"
with open(new_file, "w") as output:
    output.write(header + "\n")
    for line in list1:
        if not isinstance(line[1], str):
            raise ValueError("Second input must be a str.")
        vals = " ".join(str(i) for i in line)
        output.write(vals + "\n")
print(write_fruit(fruit_list, "fruit_list.txt"))

我的 txt 文件如下所示:

Num  Fruit  Color
 1  Banana    Yellow
 2   Apple   Red
 3   Carrot    Orange

我需要它与左侧对齐,我看到一些看起来像 {: >20} 的建议,但并没有真正理解它背后的逻辑,所以如果有不同的方法可以做到这一点,我会很高兴。

标签: pythonlistfunctiontuples

解决方案


我建议使用基本的python格式"{:<5}{:10}{:10}\n"

  • {:<5}表示最小长度为 5,带空格填充,左对齐,当{:>5}表示右对齐

  • {:10}表示最小长度为 10,带有空格填充。

默认数字对齐是对齐,所以我们必须强制对齐,而字符串的默认值已经左对齐


def write_fruit(list1, new_file):
    if not isinstance(list1, list):
        raise ValueError("First input must be a list.")
    template = "{:<5}{:10}{:10}\n"
    header = "Num Fruit Color".split()
    with open(new_file, "w") as output:
        output.write(template.format(*header))
        for line in list1:
            if not isinstance(line[1], str):
                raise ValueError("Second input must be a str.")
            output.write(template.format(*line))

给予

Num  Fruit     Color     
1    Banana    Yellow    
2    Apple     Red       
3    Carrot    Orange    

推荐阅读