对于将数据发送到Excel,我将使用CSV而不是固定长度的文本格式;这样,如果您的浮点值中需要更重要的数字,那么输出的格式不会改变。此外,您只需在Excel中打开CSV文件;您不必导入它们。并且csv.writer为您处理所有的数据类型转换问题。在
我还将利用(明显的)事实,即每个观察中的第4项似乎是一组键/值对,dict函数可以将其转换为字典。假设您知道所有的键是什么,您可以通过将它们放入一个列表(在下面的代码中称为keys)来指定它们在输出中的显示顺序。然后用列表理解创建一个有序的值列表就很简单了。因此:>>> import sys
>>> import csv
>>> keys = ['cn_01', 'cn_02', 'cn_03', 'cn_04', 'cn_05', 'cn_06']
>>> data = [[59000, 59500, 'chr1', [('cn_04', '1.362352462'), ('cn_01', '1.802001235')]], [100000, 110000, 'chr1', [('cn_03', '1.887268908'), ('cn_02', '1.990457407'), ('cn_01', '4.302275763')]], [63500, 64000, 'chr1', [('cn_03', '1.887268908'), ('cn_02', '1.990457407'), ('cn_01', '4.302275763')]]]
>>> writer = csv.writer(sys.stdout)
>>> writer.writerow(keys + ['start', 'stop', 'chromosome'])
cn_01,cn_02,cn_03,cn_04,cn_05,cn_06,start,stop,chromosome
>>>>for obs in data:
d = dict(obs[3])
row = [d.get(k, None) for k in keys] + obs[0:3]
writer.writerow(row)
1.802001235,,,1.362352462,,,59000,59500,chr1
4.302275763,1.990457407,1.887268908,,,,100000,110000,chr1
4.302275763,1.990457407,1.887268908,,,,63500,64000,chr1
上面的代码将数据写入sys.stdout;要创建一个真正的CSV文件,您可以执行以下操作:
^{pr2}$