我在根据配置中定义的位置从dicts列表中提取数据时遇到了一些麻烦。 场景: 我从vertica表中获取了一个dict列表(通过一些方法调用),我需要在文件中写入这些数据(键作为标题和值作为数据内容),以便我可以将该文件上传到sftp其他目的。
实施例
# data received in a list of dict
new_list = [{'Table':'A', 'Column':'C1', 'DataType':'int'},
{'Table':'A', 'Column':'C2', 'DataType':'varchar'},
{'Table': 'B', 'Column': 'C3', 'DataType': 'int'}
]
我的配置定义为"表"数据将从0到10开始,"列"将从11到25开始,然后是" DataType"将从文件中的25到35开始。此外,如果没有足够的数据填充定义的范围,则需要在数据之后填充空格,直到达到指定的字段长度。所以我希望输出如下。这里的清单本质上是动态的。我知道我必须使用seek()
,但有点困惑。
Table Column DataType
A C1 int
A C2 varchar
B C3 int
任何建议?
答案 0 :(得分:1)
我认为这是你想要的,使用string formatting:
>>> def f(lst):
print('{:<10s}{:<15s}{:<10s}'.format(*['Column','Table','DataType']))
for row in new_list:
s = '{d[Column]:<10s}{d[Table]:<15s}{d[DataType]:<10s}'.format(d=row)
print(s)
>>> f(new_list)
Column Table DataType
C1 A int
C2 A varchar
C3 B int
答案 1 :(得分:0)
我部分猜测但也许这就是你想要的:
new_list = [{'Table':'A', 'Column':'C1', 'DataType':'int'},
{'Table':'A', 'Column':'C2', 'DataType':'varchar'},
{'Table': 'B', 'Column': 'C3', 'DataType': 'int'}
]
# print in terminal
print "\t".join(new_list[0].keys())
for d in new_list:
print "{}\t{}\t{}".format(d["Table"], d["Column"],d["DataType"])
# write to file
with open("outfile", "w") as f:
f.write("\t".join(new_list[0].keys()) + "\n")
for d in new_list:
f.write("{}\t{}\t{}\n".format(d["Table"], d["Column"],d["DataType"]))
结果:
$ cat outfile
Column Table DataType
A C1 int
A C2 varchar
B C3 int