【问题标题】:How to output two lists match to each other into a txt file如何将两个相互匹配的列表输出到txt文件中
【发布时间】:2021-10-21 09:02:35
【问题描述】:

我这里有两个列表:

a=["rate","date","population"]
b=[4,2/3/2021,1523]

我需要将这两个列表输出到一个 txt 文件中,如下所示:

rate    date    population
4    2/3/2021    1523

两个单词之间的空格是一个制表符,我尝试使用类似的代码

with open("data.txt","w") as outfile:
zipped = zip(a, b)
set1=[]
for i, r in zipped:
    set1.append(i)
    set1.append(r)
 outfile.write(str(set1))

但它不起作用,我不知道如何将选项卡空间选项放入其中。需要一些帮助!谢谢!

【问题讨论】:

  • 您是否尝试在元素之间添加 \t 字符?
  • 你的意思是把它添加到每个元素之间的列表中?但是怎么样?该列表会将其视为 string\t 而不是选项卡。 @MartinTavernier
  • 很抱歉,我现在无法测试它。但据我所知,当您设置文件内容时,您可以将 \t 设置为字符串,文本编辑器会将其作为选项卡读取。然后当您阅读文件内容时,您会看到 \t 正常
  • 您可以使用csv 模块。

标签: python list file


【解决方案1】:

您可以使用csv 模块的DictWriter 来编写制表符分隔的文件。为此,您可以将分隔符指定为制表符。

import csv
filename = "output.txt"
a = ["rate","date","population"]
b = [4,2/3/2021,1523]
values = dict(zip(a,b))

with open(filename, 'wb') as f:
    writer = csv.DictWriter(f, delimiter='\t', fieldnames=a)
    writer.writeheader()
    writer.writerows(values)

【讨论】:

    【解决方案2】:

    你可以试试\t:

    a=["rate","date","population"]
    b=["4","2/3/2021","1523"]
    
    with open("data.txt","w") as outfile:
        outfile.write('\t'.join(a)+'\n')
        outfile.write('\t'.join(b))
    

    【讨论】:

    • true,但如果标头中有许多字段,则由于令牌长度不同,间距可能会丢失。在这种情况下,我建议为每个字段预定义一个固定长度
    • @jsofri 在问题中 OP 说它需要制表符分隔。它不一定用于布局目的,但可能用于其他一些自动化过程或文件格式。
    【解决方案3】:

    你可以使用下面的 sn-p 来实现你的结果

    a=["rate","date","population"]
    b=['4','2/3/2021','1523']
    
    result = '\t'.join(a) + '\n' + '\t'.join(b)
    
    with open('result.txt', 'w') as f:
        f.writelines(result)
    

    【讨论】:

    • TypeError:序列项 0:预期的 str 实例,找到 int。我试过了,但它说这个。因为我猜第二个列表都是整数。
    • @AndrewSwainskeren 这是算法。您可以根据自己的需要进行更改。当然,您需要使用字符串进行连接。 result = '\t'.join([str(element) for element in a]) +....
    【解决方案4】:
    a=["rate","date","population"]
    b=[4,"2/3/2021",1523]
    
    with open("data.txt","w") as outfile:
        for x in a:
            outfile.write(f'{x}\t')
        outfile.write('\n')
    
        for x in b:
            outfile.write(f'{x}\t')
        outfile.write('\n')    
    

    【讨论】:

    • 太棒了!谢谢老哥!
    【解决方案5】:

    我会使用csv 模块:

    import csv
    
    with open("data.txt", "w") as outfile:
        writer = csv.writer(outfile, delimiter='\t')
        writer.writerow(a)
        writer.writerow(b)
    

    编辑:如果您想修复代码而不使用 csv 模块:

    with open("data.txt", "w") as outfile:
        outfile.write('\t'.join(a) + '\n')
        outfile.write('\t'.join(b) + '\n')
    

    '\t'.join(a)str 的一个有用函数,它将joina 中的每个值一起用\t 分隔:

    >>> '\t'.join(["if", "this", "isn't", "nice", "what", "is?"]
    "if\tthis\tisn't\tnice\twhat\tis?"
    
    >>> print(_)
    if      this    isn't   nice    what    is?
    

    【讨论】:

    • 它有效。真的很感激!只是想知道,有没有其他方法可以在不使用 CSV 模块的情况下实现它?我在这层楼下尝试了几个建议,但都失败了。 @彼得伍德
    • @AndrewSwainskeren 已更新
    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多