[英]Parse csv string into columns in python
我有一個包含兩列的csv文件。 第一個是stringID,而第二個是stringID列表。
第1列| 列2
aaa | [u'xxx',u'yyy']
我的問題是如何用成對的stringID(兩列重復)創建一個新的csv? 例如,
第1列| 列2
aaa | u'xxx”
aaa | u'yyy”
非常感謝您的幫助! 我知道這個問題應該很簡單,但是困擾我好幾天了...
該代碼忽略了可以使用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
感謝您的建設性回答! 盡管它並不是特別適合我,但絕對可以從中得到啟發,並提出了一些功能代碼!
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.