CSV: Comma-separated values

split works for simple situations

See also rsplit.

s = 'John,Smith,123-45-6789'
fields = s.split(",")   #fields is a list of 3 strings.

for field in fields:
    print(field)
John
Smith
123-45-6789
s = '"John, Jr.",Smith,123-45-6789'
fields = s.split(",")    #fields is a list of 4 strings.

for field in fields:
    print(field)
"John
 Jr."
Smith
123-45-6789

Create a csv.reader

The reader function creates and returns an object of class _csv.reader. The argument of this function must be a list of strings (or something like a list of strings, e.g., a tuple of strings). The argument [s] is a list of one string, which is why we call next one time. The delimiter = "," is unnecessary because it is the default.

import csv

s = '"John, Jr.",Smith,123-45-6789'       #s is a string of 29 characters.
reader = csv.reader([s], delimiter = ",") #[s] is a list of 1 string.
fields = next(reader)                     #fields is a list of 3 strings.

for field in fields:
    print(field)
John, Jr.
Smith
123-45-6789

Split two strings

We just used a reader to split one string. But a reader is intended to split many strings. Let’s split two strings. Since lines is a list of two strings, we can call next twice.

import csv

lines = [
    '"John, Junior",Smith,123-45-6789',
    'John III,Smith,123-45-6790'
]

reader = csv.reader(lines) #lines is a list of 2 strings.

fields = next(reader)   #fields is a list of 3 strings.
for field in fields:
    print(field)
print()

fields = next(reader)   #fields is a list of 3 strings.
for field in fields:
    print(field)
print()

#Let's see if we can make call next a third time.
try:
    fields = next(reader)
except StopIteration:
    print("Sorry, the reader is exhausted.")
John, Junior
Smith
123-45-6789

John III
Smith
123-45-6790

Sorry, the reader is exhausted.

Split two strings with a for loop that iterates twice.

Since lines is a list of two strings, the outer for loop will iterate twice. Apparently, the outer for loop calls next once per iteration.

import csv

lines = [
    '"John, Junior",Smith,123-45-6789',
    'John III,Smith,123-45-6790'
]

reader = csv.reader(lines) #lines is a list of 2 strings.

for fields in reader:    #fields is a list of 3 strings.
    for field in fields: #field is a string.
        print(field)
    print()

#Let's make sure the outer for loop has exhausted the reader.

try:
    fields = next(reader)
except StopIteration:
    print("Everything is ok.  The outer for loop looped through all the lines.")
else:
    print("Something is wrong: the outer for loop stopped too soon.")
John, Junior
Smith
123-45-6789

John III
Smith
123-45-6790

Everything is ok.  The outer for loop looped through all the lines.