python对csv文件读写的两种方式 和 读写文件编码问题处理

'''
如果文件读取数据出错,可以考虑加一个encoding属性,取值可以是:utf-8,gbk,gb18030
或者加一个属性error,取值为ignore,例如
open(path, encoding='gb18030', errors='ignore')
'''
'''
1.csv数据为:
1,2,3
4,5,6
7,8,9

'''
import csv
def read_file1():
    with open('1.csv','r') as fp:
        # reader相当于一个迭代器
        reader = csv.reader(fp)
        # 使用next,那么就相当于把指针fp向下移动一行
        next(reader)
        for read in reader:
            print(read)

def read_file2():
    with open('1.csv','r') as fp:
        # 将csv的数据转化为字典,这个时候reader里面就不再包含第一行数据
        reader = csv.DictReader(fp)
        for read in reader:
            print(read['2'])

read_file1()
'''
输出:
['4', '5', '6']
['7', '8', '9']
'''
read_file2()
'''
输出:
5
8
'''


def write_file1():
    header = ['user', 'age']
    values = [
        ('张三', '12'),
        ('李四', '13')
    ]
    # newline默认为'
',意思就是每写入一条数据就会多一个换行
    # 如果这里编码出错,可以指定encoding的值
    with open('2.csv','w',newline='') as fp:
        writer = csv.writer(fp)
        writer.writerow(header)
        writer.writerows(values)

write_file1()

def write_file2():
    header = ['user', 'age']
    values = [
        {'user':'张三','age': '12'},
        {'user':'李四','age':'13'}
    ]
    # newline默认为'
',意思就是每写入一条数据就会多一个换行
    # 如果这里编码出错,可以指定encoding的值
    with open('2.csv','w',newline='') as fp:
        writer = csv.DictWriter(fp,header)
        # 写入字典头
        writer.writeheader()
        # 将字典数据写入
        writer.writerows(values)

write_file2()

'''
两个函数执行后的结果一样,文件2.csv中数据为:
user,age
张三,12
李四,13

'''