将CSV行解析为列,每行中的第一个条目作为每列中的第一个条目

时间:2014-08-13 23:21:37

标签: python bash csv

我有一个我需要更改的csv文件,以便我可以创建一个输入文件。设置数据以使其成为键名,然后设置数据,例如:

allendata,test@test.com,test1@test.com  
allendata2,test1@test.com,test@test.com,test3@test.com

我需要格式化的输出,以便我最终得到

allendata,test@test.com
allendata,test1@test.com
allendata2,test1@test.com
allendata2,test@test.com
allendata3,test3@test.com

大约有1800条这样的线,所以当它全部被解析出来时,我最终会得到大约30000行。

我会采取任何可能的方法,最好使用bash或python。

谢谢, 阿伦

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题

fIn = open('testIn.txt', 'r')
fOut = open('testOut.txt','w')

for line in fIn:
    data = line.split(',')
    name = data[0]
    for address in data[1:]:
        fOut.write(name + ',' + address + '\n')

fIn.close()
fOut.close()

' textIn.txt'

allendata,test@test.com,test1@test.com  
allendata2,test1@test.com,test@test.com,test3@test.com

' testOut.txt'

allendata,test@test.com
allendata,test1@test.com    
allendata2,test1@test.com
allendata2,test@test.com
allendata2,test3@test.com

答案 1 :(得分:1)

您可以使用awk这样做:

$ awk -F, '{for(i=2;i<=NF;i++) print $1","$i}' file > new_file
$ cat new_file
allendata,test@test.com
allendata,test1@test.com  
allendata2,test1@test.com
allendata2,test@test.com
allendata2,test3@test.com