如何根据python中的位置将数据写入文件

时间:2016-04-05 17:54:42

标签: python

我在根据配置中定义的位置从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

任何建议?

2 个答案:

答案 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