还有一个选择。当你开始添加更多文件时,我试着让它更容易管理。可以在命令行上运行并提供参数,每个要添加的文件都有一个参数。基因/样本名称存储在字典中以提高效率。所需JSON对象的格式化是在每个类的format()方法中完成的。希望这有帮助。在import csv, json, sys

class Sample(object):

def __init__(self, name, extras):

self.name = name

self.extras = [extras]

def format(self):

map = {}

map['sample'] = self.name

map['extras'] = self.extras

return map

def add_extras(self, extras):

#edit 8/20

#always just add the new extras to the list

for extra in extras:

self.extras.append(extra)

class Gene(object):

def __init__(self, name, samples):

self.name = name

self.samples = samples

def format(self):

map = {}

map ['gene'] = self.name

map['samples'] = sorted([self.samples[sample_key].format() for sample_key in self.samples], key=lambda sample: sample['sample'])

return map

def create_or_add_samples(self, new_samples):

# loop through new samples, seeing if they already exist in the gene object

for sample_name in new_samples:

sample = new_samples[sample_name]

if sample.name in self.samples:

self.samples[sample.name].add_extras(sample.extras)

else:

self.samples[sample.name] = sample

class Genes(object):

def __init__(self):

self.genes = {}

def format(self):

return sorted([self.genes[gene_name].format() for gene_name in self.genes], key=lambda gene: gene['gene'])

def create_or_add_gene(self, gene):

if not gene.name in self.genes:

self.genes[gene.name] = gene

else:

self.genes[gene.name].create_or_add_samples(gene.samples)

def row_to_gene(headers, row):

gene_name = ""

sample_name = ""

extras = {}

for value in enumerate(row):

if headers[value[0]] == "gene":

gene_name = value[1]

elif headers[value[0]] == "sample":

sample_name = value[1]

else:

extras[headers[value[0]]] = value[1]

sample_dict = {}

sample_dict[sample_name] = Sample(sample_name, extras)

return Gene(gene_name, sample_dict)

if __name__ == '__main__':

delim = "\t"

genes = Genes()

files = sys.argv[1:]

for file in files:

print("Reading " + str(file))

with open(file,'r') as f1:

reader = csv.reader(f1, delimiter=delim)

headers = []

for row in reader:

if len(headers) == 0:

headers = row

else:

genes.create_or_add_gene(row_to_gene(headers, row))

result = json.dumps(genes.format(), indent=4)

print(result)

with open('json_output.txt', 'w') as output:

output.write(result)

linux 合并csv文件 cat,Python:将两个CSV文件合并为多级JSON相关推荐

  1. python中两个字典如何合并为一个_python怎么合并两个字典

    Python中将两个字典进行合并操作,是一个比较常见的问题.本文将介绍几种实现两个字典合并的方案,并对其进行比较. 对于这个问题,比较直观的想法是将两个字典做相加操作,赋值给结果字典,其代码为: py ...

  2. python将两个csv文件按列合并

    python panda 进行列合并 将两个csv 文件 按列合并 ![在]第一个csv文件(https://img-blog.csdnimg.cn/20191114205658445.jpg) 代码 ...

  3. Python将两个txt文件按行合并

    import os,sys # 按行合并 两个txt文件 # 打开所需要合并的两个txt文件 file1path = '/home/xwt/桌面/PPASR-r1.x.11111/dataset/an ...

  4. 如何将多个excel表格合并成一个_如何将两个pdf文件合并成一个

    1/6 下载安装"迅捷PDF转换器" 2/6 点击图标进入软件主界面 3/6 在左侧点击"PDF的其他操作" 4/6 选择"PDF合并" 5 ...

  5. 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python源码.问题解答学习交流群:7731621 ...

  6. java合并txt文件_Java程序将两个txt文件合并为第三个txt文件 - Break易站

    让给定的两个文件是file1.txt和file2.txt.我们的任务是将两个文件合并到第三个文件,例如file3.txt,但合并应该逐行进行.以下是交替合并的步骤. 为file3.txt创建Print ...

  7. python实现两个txt文件提取不同的数据

    1.首先提供两个txt文件,分别是1.txt和2.txt 1.txt文件中的内容: ['哈尔滨市', '齐齐哈尔市', '鸡西市', '鹤岗市', '双鸭山市', '大庆市', '伊春市', '佳木斯 ...

  8. python对两个数组进行合并排列

    如何使用python对两个数组(列表)进行合并(合并为一个数组),并按照从小到大的顺序进行排列? 我们先随意写两个数组:arr1和arr2. 第一种方法:先使用extend函数将arr1和arr2合并 ...

  9. Python对比两个txt文件的不同

    # 提前准备好三个txt文件 # 1.txt 和 2.txt 为对比文件 # diff.txt 为存储不同内容文件# 以读取方式打开两个txt文件 f1 = open("1.txt" ...

  10. Python读取两个txt文件内容,重新写到新的txt文件

    本博客已经转移到:www.itwps.com 此博客后续不会再更新,详情请关注一下www.itwps.com,谢谢. def test():new_text_path="你需要写入文件的路径 ...

最新文章

  1. 魔兽世界10月15日服务器维护,《魔兽世界》怀旧服将于10月15日开放新服务器
  2. 加州无人车报告出炉,苹果表现垫底,国产车进前五
  3. linux虚拟内存当硬盘,linux里面虚拟内存和swap有什么不同?
  4. php mysql 安装错误_Apache+php配置 Mysql安装出错解决办法
  5. 讨论了好久的问题,IE、Firefox下CSS图片垂直居中的问题
  6. 4月5G手机出货量出炉:5G未成主流,你换机了吗?
  7. C语言mutex使用案例,C语言 如何使用互斥锁严格交替使用两个线程?
  8. linux grep的信息不全,Linux下grep显示前后几行信息方法介绍
  9. Android查询 每个进程的权限
  10. 5 年 Java 面试大厂遭淘汰,面试官:连这个源码都不懂
  11. 右键菜单 GenericMenu
  12. Python3-环境篇-01-Python3安装
  13. Github TOP100 Android开源,flutter与android混合开发
  14. 【树莓派】安装C#运行环境
  15. 服务器gpt分区装系统,UEFI引导+GPT分区安装windows10系统超详细图文教程
  16. 投影仪怎么看电视直播?安装这些软件带你共享2022世界杯盛宴
  17. 锂电池参数的一些概念结合一块具体电池参数表的理解
  18. mybatis一对多 多对一
  19. 《炬丰科技-半导体工艺》不破坏MEMS结构的颗粒去除方法
  20. 洛谷P1618 Java解法

热门文章

  1. 介电常数和电容的关系_第二章:关于电力基础物理知识之认识电容器01
  2. clob和blob是不是可以进行模糊查询_SQL简单查询语、运算符学习和练习
  3. nodejs学习笔记(上)
  4. linux安装jenkins配置环境变量,Ubuntu 16.04 安装Jenkins持续集成
  5. python time sleep 阻塞 异步_Python Tornado异步请求被阻塞
  6. .Net 指针使用以及在栈上创建引用对象
  7. [转帖]linux /proc目录下的文件为何无法用vi编辑保存
  8. redis持久化RDB与AOF
  9. MySQL安装 MySQL5.7.10免安装版配置,mysql5.7.10免安装版
  10. 十六进制转为float,float转为二进制