簡體   English   中英

將csv字符串解析為python中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM