我有一个包含两列的csv文件。第一个是stringID,而第二个是stringID列表。
Column1 |列2
aaa | [u'xxx',u'yyy']
我的问题是如何使用成对的stringID创建一个新的csv(两列有重复)?例如,
Column1 |列2
aaa | u'xxx'
aaa | u'yyy'
非常感谢帮助我!我知道这个问题应该很简单,但它已经困扰了我好几天......
答案 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)