Это будет сделано так, как вы намеревались в Python 3. Обратите внимание, что я набрал его быстро, поэтому можно сделать много улучшений. Я считаю, что это может быть быстрее, чем awk, но я могу ошибаться. Вы можете проверить это, используя команду time в Linux и Ma c.
#!/usr/local/bin/python3
import csv
csvr = csv.reader(open('simpsons.csv'), delimiter = ";")
index=0
for row in csvr:
if index == 0:
index = index +1
continue
print("{};{} {}".format(index,row[2],row[1]))
sindex=0
for sitem in row[3].split(','):
if sitem != "" :
sindex = sindex + 1
print("{};{}".format(row[0] + "_" + str(sindex),sitem))
index = index +1
Надеюсь, это поможет!
Редактировать:
Я сгенерировал фиктивный список из 500 тыс. Строк и проверил некоторые ответы, данные здесь пользователями, и, похоже, между Python 3 и awk нет существенной разницы. (По крайней мере, в моей плохой реализации в Python 3).
$ time awk -f tst.awk fivehundredthousand.txt &> /dev/null
real 0m2.141s
user 0m2.118s
sys 0m0.020s
$ time ./handle_csv.py >/dev/null
real 0m1.750s
user 0m1.722s
sys 0m0.021s
$ time awk -f ravinder.awk fivehundredthousand.txt &> /dev/null
real 0m1.736s
user 0m1.718s
sys 0m0.017s