dic = {'S00:D58': 1, 'M23:Q14': 1, 'S43:H52': 84,
'S43:H53': 2, 'S43:H50': 5, 'S43:H57': 1, 'M87:E11': 10}
我做了
for k,v in dic.items():
a,b = k.split(':')
print a.ljust(30), b.ljust(30), v
得到这个,
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)
而不是我想要的制表符分隔表?
如何让我的文件输出与我打印的相匹配?
答案 0 :(得分:0)
不要创建填充字符串列表,只需创建一个填充字符串。
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)
答案 1 :(得分:0)
标准库具有对此有用的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))
答案 2 :(得分:0)
当您执行以下操作时:
data = 1,2,3
#or
data = a.ljust(30), b.ljust(30), v
信息最终被打包成一个元组,以与print
语句在python 2中所做的相同的方式解压缩它:
f.write(" ".join(data) + "\n")
这使得数据中的每个元素的字符串由空格分隔,后跟换行符。 (基本上是print
自动执行的操作)
还有print
的语法允许您将内容打印到不同的文件中:
print >>f, a.ljust(30), b.ljust(30), v
摆脱这种令人困惑的语法并防止遇到的确切问题是print
在python 3中转换为函数的一些原因,新语法是这样的:
data = a.ljust(30), b.ljust(30), v
print(*data, file=f)
#or
print(a.ljust(30), b.ljust(30), v, file=f)
如果您希望在不更改版本的情况下将此表示法用于打印语句,则可以将其添加为文件的第一行:
from __future__ import print_function
答案 3 :(得分:0)
这是熊猫的方式。字典被转换为具有列'key'和val'的DataFrame,包含字典的键和值。然后通过将“关键”列拆分为两列来创建第二个数据帧,根据字符串分隔符':'。最后,两个数据帧合并并导出到TSV文件:
dic = {'S00:D58': 1, 'M23:Q14': 1, 'S43:H52': 84, 'S43:H53': 2, 'S43:H50': 5, 'S43:H57': 1, 'M87:E11': 10}
originalDF = pd.DataFrame(dic.items()).rename(columns={0: 'key', 1:'val'})
split_keysDF = pd.DataFrame(originalDF['key'].str.split(':').tolist())
finalDF = split_keysDF.join(originalDF['val'])
finalDF.to_csv('test.tsv', '\t', header=False, index=False)
答案 4 :(得分:-1)
使用pandas
import pandas as pd
dic = {'S00:D58': 1, 'M23:Q14': 1, 'S43:H52': 84, 'S43:H53': 2, 'S43:H50': 5, 'S43:H57': 1, 'M87:E11': 10}
df = pd.Dataframe(dic)
df.to_csv('test.tsv', '\t', index=False)