Writing data into different types of CSV files
In the previous article, we learned how to
read csv files in Python. In similar way, we can also write a new or edit existing csv files in Python.
In Python we use csv.writer()
module to write data into csv files. This module is similar to the csv.reader()
module.
Writing on Existing File
We have a people.csv
file with following data.
SN, Name, City
1, John, Washington
2, Eric, Los Angeles
3, Brad, Texas
Now, we are going to modify people.csv
file.
Example 1: Modifying existing rows of people.csv
import csv
row = ['2', ' Marie', ' California']
with open('people.csv', 'r') as readFile:
reader = csv.reader(readFile)
lines = list(reader)
lines[2] = row
with open('people.csv', 'w') as writeFile:
writer = csv.writer(writeFile)
writer.writerows(lines)
readFile.close()
writeFile.close()
When we open the people.csv
file with text editor, then it will show:
SN, Name, City
1, John, Washington
2, Marie, California
3, Brad, Texas
In the above program, we modified the third row of people.csv
and saved the result. At first, we read the people.csv
file using csv.reader()
function. Then, we used list()
function to convert all the csv data in a list and store in lines. After that, we changed third row of csv file with row i.e lines[2] = row
. Finally, we write the values of lines list to people.csv
file.
Sometimes, we may need to add new rows in the existing csv file. So, we are going to append a new row to people.csv
file used in Example 1.
Example 2: Appending new rows to people.csv file
import csv
row = ['4', ' Danny', ' New York']
with open('people1.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow(row)
csvFile.close()
When we open people.csv
file with text editor, then it will show :
SN, Name, City
1, John, Washington
2, Marie, California
3, Brad, Texas
4, Danny, New York
In the above program, we append a new row into people.csv
. For this, we opened the csv file in 'a'
append mode. Then, we write the value of row after the last line of the people.csv
file.
Normal CSV File
We create a normal csv file using writer()
method of csv module having default delimiter comma(,)
.
Example 3: Write a python list into person.csv file
import csv
csvData = [['Person', 'Age'], ['Peter', '22'], ['Jasmine', '21'], ['Sam', '24']]
with open('person.csv', 'w') as csvFile:
writer = csv.writer(csvFile)
writer.writerows(csvData)
csvFile.close()
When we open the person.csv file with text editor, then it will show :
Person,Age
Peter,22
Jasmine,21
Sam,24
In the above program, we use csv.writer()
function to write data from a list csvData into a csv file person.csv
.
Note: The writerow()
method writes one row at a time. If you need to write all the data at once you can use writerows()
method.
CSV Files with quotes
We can write the csv file with quotes, by registering new dialects using csv.register_dialect()
class of csv module.
Example 4 : Write into person1.csv file
import csv
person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]
csv.register_dialect('myDialect',
quoting=csv.QUOTE_ALL,
skipinitialspace=True)
with open('person1.csv', 'w') as f:
writer = csv.writer(f, dialect='myDialect')
for row in person:
writer.writerow(row)
f.close()
When we open person1.csv
file, we get following output :
"SN","Person","DOB"
"1","John","18/1/1997"
"2","Marie","19/2/1998"
"3","Simon","20/3/1999"
"4","Erik","21/4/2000"
"5","Ana","22/5/2001"
In above program, we register a dialect named myDialect
. Inside myDialect
we use quoting=csv.QUOTE_ALL
to write the double quote on all the values.
CSV files with Custom Delimiters
A delimiter is a string used to separate fields. The default value is comma(,)
.
We can write csv file having custom delimiter by registering a new dialect with the help of csv.register_dialect()
.
Example 5 : Writing with custom delimiter as pipe(|)
import csv
person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]
csv.register_dialect('myDialect',
delimiter = '|',
quoting=csv.QUOTE_NONE,
skipinitialspace=True)
with open('dob.csv', 'w') as f:
writer = csv.writer(f, dialect='myDialect')
for row in person:
writer.writerow(row)
f.close()
When we open dob.csv
file, we get following output:
SN|Person|DOB
1|John|18/1/1997
2|Marie|19/2/1998
3|Simon|20/3/1999
4|Erik|21/4/2000
5|Ana|22/5/2001
In the above program, we register a dialect with delimiter as pipe(|)
. Then we write a list into a csv file dob.csv
.
CSV File with a Lineterminator
A lineterminator is a string used to terminate lines produced by writer. The default value is \r\n
.
We can write csv file with a lineterminator in Python by registering new dialects using csv.register_dialect()
class of csv module
Example 6 : Writing csv file using a lineterminator
import csv
csvData = [['Fruit', 'Quantity'], ['Apple', '5'], ['Orange', '7'], ['Mango', '8']]
csv.register_dialect('myDialect', delimiter = '|', lineterminator = '\r\n\r\n')
with open('lineterminator.csv', 'w') as f:
writer = csv.writer(f, dialect='myDialect')
writer.writerows(csvData)
f.close()
When we open the lineterminator.csv
file, we get following output:
Fruit|Quantity
Apple|5
Orange|7
Mango|8
In above code, we register a new dialects as myDialect
. Then, we use delimiter='|'
where a |
is considered as column separator. After that, we use lineterminator='\r\n\r\n'
where each row separates after every two lines.
Note : Python's CSV module only accepts \r\n
, \n
or \r
as lineterminator.
CSV File with quotechars
We can write the csv file with custom quote characters, by registering new dialects using csv.register_dialect()
class of csv
module.
Example 7: Writing CSV FIle with quotechars
import csv
csvData = [['SN', 'Items'], ['1', 'Pen'], ['2', 'Book'], ['3', 'Copy']]
csv.register_dialect('myDialect',
delimiter = '|',
quotechar = '"',
quoting=csv.QUOTE_ALL,
skipinitialspace=True)
with open('quotechars.csv', 'w') as csvFile:
writer = csv.writer(csvFile, dialect='myDialect')
writer.writerows(csvData)
print("writing completed")
csvFile.close()
Output:
"SN"|"Items"
"1"|"Pen"
"2"|"Book"
"3"|"Copy"
In the above program, we register a dialect called myDialect. Then we use delimiter as pipe(|)
and quotechar as doublequote '"'
.
Writing CSV file into a Dictionary
Using DictWriter()
class of csv module, we can write a csv file into a dictionary. It works similar to the writer()
function but creates an object which maps data into a dictionary. The keys are given by the fieldnames
parameter.
Example 8: Writing dictionary into peak.csv file
import csv
data = [{'mountain' : 'Everest', 'height': '8848'},
{'mountain' : 'K2 ', 'height': '8611'},
{'mountain' : 'Kanchenjunga', 'height': '8586'}]
with open('peak.csv', 'w') as csvFile:
fields = ['mountain', 'height']
writer = csv.DictWriter(csvFile, fieldnames=fields)
writer.writeheader()
writer.writerows(data)
print("writing completed")
csvFile.close()
When we open peak.csv
file, it will contain following output :
mountain,height
Everest,8848
K2,8611
Kangchenjunga,8586
In the above program, we use fieldnames
as headings of each column in csv file. Then, we use a DictWriter()
to write dictionary data into peak.csv
file.
Example 9: Writing dictionary into grade.csv file with custom dialects
import csv
csv.register_dialect('myDialect', delimiter = '|', quoting=csv.QUOTE_ALL)
with open('grade.csv', 'w') as csvfile:
fieldnames = ['Name', 'Grade']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, dialect="myDialect")
writer.writeheader()
writer.writerows([{'Grade': 'B', 'Name': 'Alex'},
{'Grade': 'A', 'Name': 'Bin'},
{'Grade': 'C', 'Name': 'Tom'}])
print("writing completed")
When we open grade.csv
file, it will contain following output:
"Name"|"Grade"
"Alex"|"B"
"Bin"|"A"
"Tom"|"C"
In the above program, we create a custom dialect called myDialect with pipe(|)
as delimiter. Then, use fieldnames
as headings of each column in csv file. Finally, we use a DictWriter()
to write dictionary data into grade.csv
file.
Kaynak : https://www.programiz.com/python-programming/working-csv-files#quotechars-files