CSV是一种通用的、相对简单的文件格式,被广泛应用。
CSV文件
CSV文件(Comma-Separated Values,也称为字符分隔值),是以纯文本形式存储表格数据(数字和文本)的文件;由任意条记录组成:
- 记录间以换行符分隔;
- 每条记录由多个字段组成,字段由分隔符(最常见的是逗号或制表符)分割;
- 字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住;
通常,所有记录都有完全相同的字段序列。
csv库读写
通过csv库读写时,需要先导入库import csv
写文件
通过open打开文件,然后与csv.writer
关联即可:
- 设定换行符为空(
newline=""
):否则会出现空行; - 要保证每条记录及时写入文件,需要通过flush刷新缓冲区;
- 通过
writerow
,把一个列表作为一条记录写入;
每条都刷新的示例:
with open(os.path.join(storePath, "result.csv"), 'w', encoding='utf-8', newline="") as f:
writer = csv.writer(f)
def csvWrite(name, result, count, notes=""):
writer.writerow([name, count, notes])
f.flush()
csvWrite("名称", "数量", "说明")
csvWrite("paper", 10, "how many")
读文件
通过csv.reader()
返回一个reader
对象,即可对这个对象进行遍历,输出每一行,某一行,或某一列
遍历方式
依次遍历每一行与每一列,来获取内容:
with open('result.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for rec in reader:
print(rec)
for field in rec:
print("\t" + field)
遍历到的每一行rec为一个list,而每个字段field为str。
list方式
可把返回的reader直接转换为list,通过操作list来获取文件内容:
with open('result.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
result = list(reader)
print(result)
numpy读取
通过numpy也可读取csv文件:
- delimiter设定字段的分隔符;
- skiprows设定跳过开始多少行;
- usecols设定读取哪些列;
import numpy as np
data = np.loadtxt(open("result.csv","rb"),delimiter=",",skiprows=n,usecols=[2,3])
panda读写
通过panda(pip install pandas
)也可方便地读写csv文件:
import pandas as pd
df=pd.read_csv('result.csv',header=None,sep=',')
创建DataFrame后,可通过to_csv()来写文件:
import pandas as pd
city = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
city.to_csv('city.csv')