一、python的csv写文件
1.整体写入
from pandas import DataFrame
import numpy as np
df1 = DataFrame(np.arange(12).reshape((3,4)),columns = ['a','b','c','d'])
df1.to_csv('target.csv',encoding='utf-8')
2.以不断添加行的形式写入
python写csv文件会遇到两个问题,一个是csv文件每写入一行会自动空一行,一个是中文遇到的编码问题。
(1)空行问题
- python2.7,采用二进制写入,注意‘ab+’,读的时候编码格式为‘gbk’。
li1 = [1,2,3,4,5]
with open('target.csv', 'ab+') as f:
writer = csv.writer(f)
writer.writerow(li1)
# 或者
# f = open('target.csv', 'ab+')
- python3.6(以及相关版本,例3.5等),可加入参数newline='',解决空行问题。
li1 = [1,2,3,4,5]
with open('target.csv', 'a+', newline='') as f:
writer = csv.writer(f)
writer.writerow(li1)
# 或者
# f = open('target.csv', 'a+', newline='')
(2)中文编码问题
python3.6(以及相关版本,例3.5等)写入以编码为‘utf-8’中文时,虽然读的时候用‘utf-8’打开不影响中文编码,但用excel打开csv文件时,会出现中文乱码问题,因此采用编码为‘utf-8-sig’的方式写入,读文件时可用‘utf-8’打开,也可用‘utf-8-sig’打开。
li1 = [1,2,3,4,5]
with open('target.csv', 'a+', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(li1)
# 或者
# f = open('target.csv', 'a+', newline='', encoding='utf-8-sig')
二、python的csv读文件
一般情况,我会用pandas的read_csv()方法打开csv文件。
import pandas as pd
df1 = pd.read_csv('target.csv',encoding='utf-8')
print(df1)