Проблема возникает из-за того, что итерация по файлу выполняется построчно, тогда как итерация по строке выполняется посимвольно.
Вы хотите StringIO
/ cStringIO
(Python 2) или io.StringIO
(Python 3, спасибо John Machin за указание на это), поэтому строку можно рассматривать как файлоподобныйобъект:
Python 2:
mystring = 'a,"b\nb",c\n1,2,3'
import cStringIO
csvio = cStringIO.StringIO(mystring)
mycsv = csv.reader(csvio)
Python 3 :
mystring = 'a,"b\nb",c\n1,2,3'
import io
csvio = io.StringIO(mystring, newline="")
mycsv = csv.reader(csvio)
Оба будут правильно сохранять переводы строк внутрицитируемые поля:
>>> for row in mycsv: print(row)
...
['a', 'b\nb', 'c']
['1', '2', '3']