为什么打印python字典的工作方式不同于将其写入文件的工作方式?

时间:2019-05-08 04:22:18

标签: python python-3.7

使用sql连接,在该连接中我得到一个返回列表,其中每个选择行包含4个特定项。我遇到打印输出与输出文本文件不同的问题。

当我打印此列表时,看起来应该是这样,没问题。

>>>print(my_list)
>>>['item1', 'item2', 'item3', 'item4', 'item1a', 'item2a', 'item3a', 'item4a']

我添加了一些标签,以使用内容描述标签来打印这些项目,并执行以下操作:

labels = ['ID1', 'ID2', 'ID3', 'ID4']
my_dictionary = {}
filename = '\\Somefilepath\\file.txt'
len_of_labels = len(labels)

with open(filename, "w", encoding='utf-8') as f:
    for i, l in enumerate(my_list):
        my_dictionary[l] = labels[i % len_of_labels]
    for d in my_dictionary:
        f.write('{:15} : {:3}'.format(my_dictionary[d], d))
f.close()

如果我使用print而不是f.write,则会得到预期的输出:

ID1      item1
ID2      item2 
ID3      item3
ID4      item4
ID1      item1a
ID2      item2a 
ID3      item3a
ID4      item4a 
# And so one

但是当使用上述方法写入文本文件时,它会将长度缩短到比len项短,然后在第二次迭代时停止,因此看起来像这样:

ID1      item1
ID2      item2 
ID3      item3  
ID1      item1a
ID2      item2a 
# Does not give me all 4 on the first iteration and cuts off the second one

2 个答案:

答案 0 :(得分:0)

我认为这是因为您是在完全创建字典之前编写字典元素的。尝试将创建与编写分开,如下所示:

# first create the dictionary
for i, l in enumerate(my_list):
    my_dictionary[l] = labels[i % len_of_labels]

# then write it to file
with open(filename, "w", encoding='utf-8') as f:
    for d in my_dictionary:
        f.write('{:15} : {:3}\n'.format(my_dictionary[d], d))

答案 1 :(得分:0)

在进行了一些测试并在其他人的帮助下进行了复习之后,字典成为了具有相同键值对的问题。发布包含对齐方式格式的有效方法。

with open(filename, "w", encoding='utf-8') as f:
    for idx, value in enumerate(my_list):
    i = labels[idx % 3]
    f.write('{:15} : {:3}'.format(i, value))