1. reader=csv.reader(f, delimiter=','):按行读取数据,reader为生成器,读取的每行数据为列表格式,可以通过delimiter参数指定分隔符。
import csv
with open('data.csv', encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader) #当文件中有标题行时,可使用header=next(reader)先获取到第一行的数据,再进行遍历剩余所有的数据行
print(header)
for row in reader:
print(row)
所有的数据都以字符串输出(包括数字),如果要使用数字格式,要使用int()/float()做相应转换
2. writer=csv.writer(f):按行写入数据,,writer支持writerow(列表)单行写入,和writerows(嵌套列表)写入多行数据
import csv
header = ['name', 'age', 'sex(gentle/male)']
data = [
['张三', '18', 'gentle'],
['李四', '19', 'male'],
['王五', '20', 'gentle']
]
with open('data.csv', 'w', encoding='utf-8', newline='') as f: #指定格式为w 文本写入,不支持wb二进制写入;指定不自动添加新行newline='',否则每写入一行就或多一个空行
writer = csv.writer(f) #如果想写入的文件用Excel打开没有乱码,utf-8可以改为utf-8-sig。
writer.writerow(header) #单行写入标题行
writer.writerows(data) #多行写入数据行
3.reader=csv.DictReader(f):将标题和每一列数据组装成有序字典(OrderedDict)格式,无须再单独读取标题行。
import csv
with open('data.csv', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['name'], row['age'], row['sex(gentle/male)'])
4.writer=csv.DictWriter(f, 标题行列表):写入可以先用writer.writeheader()写入标题,然后再用writer.writerow(字典格式数据行)或write.writerows(多行数据)。
import csv
header = ['name', 'age', 'sex(gentle/male)']
data = [
['张三', '18', 'gentle'],
['李四', '19', 'male'],
['王五', '20', 'gentle']
]
with open('data.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, header)
writer.writeheader()
writer.writerows(data)