数据表

1
2
3
4
5
name,age,sex,score
Bob,20,male,90
Tom,21,male,95
Lucy,19,female,89
Jim,22,male,99

csv.reader

组成每一行的row是列表

生成文件对象

1
2
3
4
5
6
csv_file = open('new.csv',newline='')
reader = csv.reader(csv_file)
header = next(reader) # 读取header
print(header)
...
csv_file.close()

如果没有指定newline=’’,则嵌入引号中的换行符将无法正确解析(两行数据间会多一个空行)

遍历行数据

1
2
3
4
5
6
7
# 遍历行数据
for row in reader: # 此时将不包含header,row是list
print(reader.line_num,row) # 打印行号和行数据(行号从1开始,header是1)
print(','.join(row)) # 将row中的元素用','连起来

# 等价于用列表推导式读取行数据
[print(row) for row in reader]

读取指定行数据

1
2
3
4
5
6
7
8
# 遍历所有行,只输出符合条件的行
for index,row in enumerate(reader):
if index in [2,3]:
print(row)

# 切片法,但是数据较大的话不推荐
rows = list(reader)
print(rows[1])

读取指定列数据

1
2
3
# 使用列表推导式解析列数据,打印第二列的数据
col = [row[2] for row in reader]
print(col)

读取指定单元格

1
2
3
# 打印数据区域第一行第二列的数据
rows = list(reader)
print(rows[0][1])

csv.DictReader

组成每一行的row是字典

生成文件对象

1
2
3
4
5
6
csv_file = open('new.csv',newline='')
reader = csv.DictReader(csv_file)
header = reader.fieldnames # 读取header
print(header)
...
csv_file.close()

遍历行数据

1
2
3
4
5
6
7
# 不带key
for row in reader: # 此时row是dict
print(row['name'],row['age'])

# 带key
for row in reader:
print(row)

读取指定行数据

和csv.reader一样

1
2
3
4
5
6
7
8
# 遍历所有行,只输出符合条件的行
for index,row in enumerate(reader):
if index in [2,3]:
print(row)

# 切片法,但是数据较大的话不推荐
rows = list(reader)
print(rows[1])

读取列数据

1
2
for row in reader:
print(row['name'])

读取单元格

1
2
3
# 打印数据区域第一行的name数据
rows = list(reader)
print(rows[0]['name'])

csv.writer

1
2
3
4
5
6
7
# 写入行数据
csv_file = open('new.csv','w',newline='')
writer = csv.writer(csv_file)
writer.writerow(['name','age','sex','score'])
writer.writerow(['Coco',20,'male',90])
writer.writerows([row1,row2]) # 多行写入数据
csv_file.close()

csv.DictWriter

1
2
3
4
5
6
csv_file = open('new.csv','w',newline='')
fieldnames = ['name','age','sex','score'] # header
writer = csv.DictWriter(csv_file,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'name':'Bob','age':20,'sex':'male','score':90})
writer.writerows([{'name':'Tom','age':21,'sex':'male','score':95},{'name':'Lucy','age':19,'sex':'female','score':89}])