python操作文本之CSV文件

 

 

python 操作csv文件有两种方法,一种是使用pandas来读写csv文件,第二种是使用csv模块读写csv文件

一、pandas读写csv文件

1.df = pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None[,...])

参数有很多,主要的就是这几个

filepath_or_buffuer:文件路径或者内存中的数据,可以是字符串,还是是urls
sep 分隔符,默认是',',
delimiter:分界符,默认是None,如果指定值之后sep将会失效
header:可以是整数,整数组成的列表,默认是infer,定义文件的列名,默认是第一行作为列的标签,还可以用一个整数指定第几行用作列名
names :使用的列名如果header=None,则需要传一个列表作为列名,如果列表的元素小于列数,则从列表长度个列作为列,其余列作为行索引
例如,数据有四列,传的参数,names=[0,1],则前两列做为行索引,后两列作为列数据,列索引为位置索引
index_col 可以是一个整数,字符串,序列,或者false,默认是None,例如,index_col=1,则将第二列作为行索引
usecols:选取要读取的列,可以是列名,也可以是位置索引(列文档中的整数索引)
dtype:数据类型

可以结合作代码理解

import pandas as pd
df = pd.read_csv('test.csv')# 读取文件的全部数据,header默认第一行作为列名
print(df)

"""
输出结果:
	姓名	语文	数学	英语
0	王学超	92	92	67
1	王猛	85	97	67
2	边梦杰	86	94	69
3	张子烨	88	64	93
4	汤思梦	81	97	65
5	韩雨潇	84	92	65
6	李红超	88	85	66
7	李晓月	87	84	68
8	刘洋	77	96	66
9	孙梅丽	81	91	66
10	刘旭	82	93	63
11	吕振萍	86	88	62
12	王海明	85	66	84
13	马鑫龙	83	92	60
14	李秀群	81	65	88
"""

df1 = pd.read_csv('test.csv',index_col=None,usecols=[0,3]) # 选择其中的第1列和第四列
print(df1)

"""
输出结果:
    姓名   英语
0	王学超	67
1	王猛	67
2	边梦杰	69
3	张子烨	93
4	汤思梦	65
5	韩雨潇	65
6	李红超	66
7	李晓月	68
8	刘洋	66
9	孙梅丽	66
10	刘旭	63
11	吕振萍	62
12	王海明	84
13	马鑫龙	60
14	李秀群	88

"""

2.使用pandas将数据写入到csv文件中

dataframe.to_csv(path_or_buf=None, sep=',',columns=None, header=True, index=True, index_label=None, mode='w', encoding=None)
常用参数:其他参数可以参看pandas官方文档
path_or_buf 文件名
sep 分界符
na_rep 对于缺失值的处理
columns 选取要写入的列
header 默认是True,将列名写入文件,False是不写入
index 默认是True,将行索引写入文件,False是不写入
index_label 为索引列添加列标签,默认None
mode='w' python写模式,默认是w
encoding 表示要在输出文件中使用的编码的字符串,默认为“utf - 8”写入csv文件只需一行代码即可:
dataframe.to_csv('tt.csv',header=False,index=False,columns=[1,3])

二、使用csv模块读写csv文件

1、读取csv文件

 

#方法一:
#这种方式读取到的每一条数据是一个列表,要是想要获取具体某一个值只能通过下标的方式

import csv

with open('test.csv','r',encoding='utf-8') as f:
    reader = csv.reader(f)
    for x in reader:
        print(x[0]) #获取姓名




#方法二:

# 这种方式读取到的每一条数据是一个字典,所以可以通过列名获取具体的数据
import csv

with open("test.csv",'r',encoding='utf-8') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x)
        print(x['姓名']) #获取姓名

2、写入csv文件

  

import csv

f = open('test.csv','w',encoding='utf-8',newline='')
header = ['姓名','语文','数学','英语']

data = [['王学超',92,92,67],['王猛',85,97,67],['边梦杰',86,94,69],['张子烨',88,64,93],['汤思梦',81,97,65],['韩雨潇',84,92,65],['李红超',88,85,66]]
writer = csv.writer(f,delimiter=',', quotechar='"')
writer.writerow(header)
writer.writerows(data)
f.close()

这样写入数据之后发现,每行都多了一个空行,这里需要在写入的时候设置一个参数newline=‘’(默认是None)这样就不会有空行

import csv

with open('test.csv','w',encoding='utf-8',newline='') as f:
    headers = ('姓名','语文','数学','英语')

    data = [{"姓名":'王学超',"语文":92,"数学":92,"英语":67},
            {"姓名":'王猛',"语文":85,"数学":97,"英语":67},
            {"姓名":'边梦杰',"语文":86,"数学":94,"英语":69},
            {"姓名":'张子烨',"语文":88,"数学":64,"英语":93},
            {"姓名":'汤思梦',"语文":81,"数学":97,"英语":65},
            {"姓名":'韩雨潇',"语文":84,"数学":92,"英语":65},
            {"姓名":'李红超',"语文":88,"数学":85,"英语":66}]
    writer = csv.DictWriter(f,headers) #这里需要将headers传入
    writer.writeheader() #需要调用writerheader()将headers写入进去,用writerow()是无法写入的
    writer.writerows(data)

这两种写入方法:第一种是以列表的是形式作为参数写入的,第二种是用字典的形式吸入的,在字典方式写入的时候虽然DictWriter创建的时候有一个headers,但是想要写入数据进去,还是需要调用writer.writeheader()方法,否则,表头数据写入不进去,这一点是需要注意的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值