我有一個包含兩列的csv文件。第一個是一個stringID,而第二個是一個stringID列表。將csv字符串解析爲python中的列
列1 |列2
AAA | [u'xxx',u'yyy']
我的問題是如何創建一個新的csv與成對的字符串(兩列重複)?例如,
列1 |列2
AAA | u'xxx」
AAA | u'yyy」
非常感謝幫助我!我知道這個問題應該很簡單,但它一直困擾着我幾天......
我有一個包含兩列的csv文件。第一個是一個stringID,而第二個是一個stringID列表。將csv字符串解析爲python中的列
列1 |列2
AAA | [u'xxx',u'yyy']
我的問題是如何創建一個新的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
使用'eval()'幾乎總是錯誤的選擇。 ['ast.literal_eval()'](https://docs.python.org/3/library/ast.html?highlight=ast.literal_eval#ast.literal_eval)在更安全的情況下也可以正常工作。 – Chris
謝謝,我沒有意識到這一點。很好知道! –
感謝您的建設性答案!儘管它對我來說並不是特別有用,但我確實受到了它的啓發,並提出了一些功能性代碼!
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)
如果它一直在困擾你幾天,你應該有一些你已經嘗試過的代碼。請與我們分享。 – Chris
你能告訴我們你有什麼代碼,所以我們可以幫你嗎?我們不在這裏爲你工作。 –