Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字典表写入文本文件?_Python_Dictionary_Text_Tab Delimited Text - Fatal编程技术网

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

Python 如何将字典表写入文本文件?,python,dictionary,text,tab-delimited-text,Python,Dictionary,Text,Tab Delimited Text,我做到了 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 我想将此表保存到制表符分隔的文本文件中。所以我试过了 S

我做到了

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()
而不是我想要的制表符分隔表

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

使用pandas

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

与其创建填充字符串列表,不如创建一个填充字符串

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)
打开('/path/to/dest/file',w')作为dest时的
:
对于dic.items()中的k、v:
a、 b=k.split(“:”)
数据={a}{b}{v}。格式(a=a.ljust(30),b=b.ljust(30),v=v)

data='{:标准库具有用于此操作的库。您可以使用内置的
“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))
信息最终被打包到一个元组中,以与python 2中的
print
语句相同的方式解包,您可以执行以下操作:

data = 1,2,3
#or
data = a.ljust(30), b.ljust(30), v 
这使得数据中的每个元素都有一个字符串,由空格和换行符分隔。(基本上是
print
自动执行的操作)

print
还有一种语法,可以将内容打印到不同的文件中,如下所示:

f.write(" ".join(data) + "\n")
print >>f, a.ljust(30), b.ljust(30), v
摆脱这种令人困惑的语法并避免您遇到的确切问题是将
print
转换为python 3中的函数的一些原因,新语法如下所示:

f.write(" ".join(data) + "\n")
print >>f, a.ljust(30), b.ljust(30), v
如果希望在不更改版本的情况下对打印语句使用此符号,可以将其添加为文件的第一行:

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

这是Pandas的方法。字典被转换成一个数据框,其中包含字典的键和值,列为
key
val
。然后,根据字符串分隔符
key
列拆分为两列,创建第二个数据框。最后,这两个数据框就是我rged并导出到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(列={0:'key',1:'val'})
split_keysDF=pd.DataFrame(originalDF['key'].str.split(':').tolist())
finalDF=split_keydf.join(originalDF['val'])
finalDF.to_csv('test.tsv','\t',header=False,index=False)

<或代码>您可以考虑使用<代码>数据=“{:当前答案是不正确的”。将字典导入到数据文件中的正确方法是:“代码> df= pD.DATAFRAME.FROX.DICT(DIC,OrthoNe=“index”)< /C>”,然后它可以导出到一个文件:“代码> df.toyCSV(‘Test.TSV’,‘t’,头=false,index=true)< /COD>