Python读取CSV文件遇到问题

 

目前,Python3(以下简称Python)至少有三种办法读取CSV格式文件,分别是:

1.csv模块 
2.numpy里面的loadtxt方法 
3.pandas里面的read_csv方法

python中有一个读写csv文件的包,直接import csv即可。利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下。

1. 读文件

csv_reader = csv.reader(open('data.file', encoding='utf-8'))
    for row in csv_reader:
        print(row)

例如有如下的文件

输出结果如下

['0.093700','0.139771','0.062774','0.007698']

['-0.022711','-0.050504','-0.035691','-0.065434']

['-0.090407','0.021198','0.208712','0.102752']

['-0.085235','0.009540','-0.013228','0.094063']

可见csv_reader把每一行数据转化成了一个list,list中每个元素是一个字符串

2. 写文件

读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中。

list = ['1', '2','3','4']
out = open(outfile, 'w')
csv_writer = csv.writer(out)
csv_writer.writerow(list)

可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。

解决办法如下:

out = open(outfile, 'w', newline='')
csv_writer = csv.writer(out, dialect='excel')
csv_writer.writerow(list)

问题:想读取每列的数据,画出折线图,没想到总是报错,后来才意识到csv.reader函数读取的list是字符型,所以进行转换类型

python中map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

python里面直接转一维的list

问题 1:

list=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

转化为:list=[0, 1 ,2, 3, 4, 5, 6, 7, 8, 9]

代码如下:

1	list_to_float = list(map(lambda x:float(x), list))

问题2:(对于二维数组,需要加个循环,变成一维数组)

list=[['0', '1', '2'], ['3', '4', '5'], ['6', '7', '8']]

转化为:list=[[0, 1 ,2], [3, 4, 5], [6, 7, 8]]

代码如下:

list_to_float = []

for each in list:

    each_line=list(map(lambda x: float(x), each))

    list_to_float.append(each_line)

这样输出才不会报错: 

with open(filename) as f: #打开文件文件并将内容储存在reader中
    csv_data=csv.reader(f) #读取并将内容储存在reader中
    list_str = [row[0] for row in csv_data]   #读取每列的数据
    list_float = list(map(lambda x:float(x), list_str)) #将list中的字符转为数字
    print(list_float)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值