将csv字符串解析为python

时间:2017-04-26 20:46:14

标签: python csv parsing

我有一个包含两列的csv文件。第一个是stringID,而第二个是stringID列表。

  

Column1 |列2

     

aaa | [u'xxx',u'yyy']

我的问题是如何使用成对的stringID创建一个新的csv(两列有重复)?例如,

  

Column1 |列2

     

aaa | u'xxx'

     

aaa | u'yyy'

非常感谢帮助我!我知道这个问题应该很简单,但它已经困扰了我好几天......

2 个答案:

答案 0 :(得分:0)

此代码忽略了可以使用csv样式处理的可能性,因为我不确定字段是如何分隔的。我以为他们被一个' |'性格和可能有必要剥离空白。我利用ast.literal_eval来安全处理列表时发表评论。

>>> from io import StringIO
>>> import ast
>>> inputCSV = StringIO('''\
... Column1 | Column2
... aaa | [u'xxx', u'yyy']
... bbb | [u'sss', u'ttt']''')
>>> header = True
>>> with inputCSV as inCSV:
...     for line in inCSV.readlines():
...         
...         column1, column2 = [_.strip() for _ in line.split('|')]
...         
...         
...         if header:
...             print ('%s|%s' % (column1, column2))
...             header = False
...         else:
...             column2 = ast.literal_eval(column2)
...             
...             for item in column2:
...                 print ('%s|%s' % (column1, item))
... 
Column1|Column2
aaa|xxx
aaa|yyy
bbb|sss
bbb|ttt

答案 1 :(得分:0)

感谢您的建设性回答!虽然它对我来说并不是很有用,但我确实受到了它的启发并提出了一些功能代码!

header = True

with open('2.csv') as inCSV:
writer = csv.writer(open('1.csv', 'wb'))
for line in inCSV.readlines():
    column1, column2 = [_.strip() for _ in line.split(',',1)]
    if header:
        writer.writerow(('source','target'))
        header = False
    else:
        temp=column2.replace("[","]").replace("]","").replace('"','').split(",")
        for i in range(len(temp)):
            data=(column1,temp[i])
            writer.writerow(data)