如何将字典表写入文本文件?

2024-06-16 14:28:55 发布

您现在位置:Python中文网/ 问答频道 /正文

dic = {'S00:D58': 1, 'M23:Q14': 1, 'S43:H52': 84, 
   'S43:H53': 2, 'S43:H50': 5, 'S43:H57': 1, 'M87:E11': 10}

我做到了

^{pr2}$

为了得到这个

S00         D58          1    
M23         Q14          1   
S43         H52          84   
S43         H53          2   
S43         H50          5   
S43         H57          1   
M87         E11          10 

我想把这个表保存到制表符分隔的文本文件中。所以我试过了

data = a.ljust(30), b.ljust(30), v    
f.write(str(data))    
f.close()

但我有

('S00', 'D58', 1)('M23', 'Q14', 1)('S43', 'H52', 84)('S43', 'H53', 2)('S43', 'H50', 5)('S43', 'H57', 1)('M87', 'E11', 10) 

而不是我想要的制表符分隔的表?在

如何使我的文件输出与打印的内容匹配?在


Tags: data制表符dicljuste11m23s43q14
3条回答

当你做如下事情时:

data = 1,2,3
#or
data = a.ljust(30), b.ljust(30), v 

信息最终被打包到一个元组中,以与python 2中print语句相同的方式对其进行解压,可以执行以下操作:

^{pr2}$

这使得数据中每个元素的字符串由空格隔开,后跟换行符。(基本上print自动执行的操作)

print还有一种语法,可以让您将内容打印到其他文件中,如下所示:

print >>f, a.ljust(30), b.ljust(30), v

摆脱这种令人困惑的语法并防止您遇到的确切问题是print在Python3中被转换为函数的一些原因,新语法如下:

data = a.ljust(30), b.ljust(30), v
print(*data, file=f)
#or
print(a.ljust(30), b.ljust(30), v, file=f)

如果您希望在不更改版本的情况下对print语句使用此表示法,可以将其添加到文件的第一行:

from __future__ import print_function

不要创建填充字符串的列表,只需创建一个填充字符串。在

with open('/path/to/dest/file', 'w') as dest:
    for k, v in dic.items():
        a, b = k.split(':')
        data = '{a}{b}{v}'.format(a=a.ljust(30), b=b.ljust(30), v=v)
        data = '{:<30}{:<30}{}'.fomat(a, b, v)
        print data
        dest.write('%s\n' % data)

标准库具有对此有用的csv库。您可以使用内置的"excel-tab"方言输出制表符分隔的数据,而不是逗号分隔的数据。 在

import csv

dic = {'S00:D58': 1, 'M23:Q14': 1, 'S43:H52': 84, 
   'S43:H53': 2, 'S43:H50': 5, 'S43:H57': 1, 'M87:E11': 10}

with open("output.tsv", "w") as csvfile:
    writer = csv.writer(csvfile, dialect="excel-tab")
    for key, value in dic.items():
        a, b = key.split(":", 1)
        writer.writerow((a, b, value))

相关问题 更多 >