python csv的使用整理

题外话:终于有点时间写博客了。还是比较开心的。工作中大部分时间基本上不编程,除了shell和敲下命令外。下班后才有空看看python。最近整理一些数据,同事给了我10万行数据,让我安装他的格式给筛选出来,我选择使用csv模块将处理后的数据进行导出。碰到个问题。

某一列的前置零没有了,开始以为是python程序出问题,一看csv有,但是exel打开看没有,问题原因是exel将前置零给忽略了。还好,一下子解决了。

以下的大部分文字来自python2.7手册。
(有道翻译的,所以翻译难免出错,知道大概意思就好。)
先给我我的数据:是以逗号分隔的。不是空格。
“`
in_hour_time,counts
20170830 11,1667
20170830 12,2622
20170830 13,2578
20170830 14,2878

“`
1)csv

所谓的CSV(逗号分隔值)格式是电子表格和数据库最常见的导入和导出格式。没有“CSV标准”,所以这种格式是由许多读和写的应用程序定义的。缺乏标准意味着在不同应用程序所产生和使用的数据中经常存在细微的差异。这些差异使得从多个数据源处理CSV文件变得很麻烦。尽管如此,虽然分隔符和引用字符各不相同,但总体格式非常相似,可以编写单个模块,可以有效地操作这些数据,隐藏读取和写入程序员数据的细节。
csv模块实现了以csv格式读取和写入表格数据的类。它允许程序员说:“以Excel编写的格式写入数据,”或者“从Excel生成的文件中读取数据”,而不知道Excel使用的CSV格式的具体细节。程序员还可以描述其他应用程序理解的CSV格式,或者定义自己的专用CSV格式。

2)打开文件的模式:csv.reader
手册上的一个例子:

>>> import csv
>>> with open('eggs.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile,
                delimiter=' ',quotechar='|')
...     for row in spamreader:
...         print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

题外话:这里用到了with open来读取文件,所以不需要手动关闭文件了。

csv.reader(csvfile, dialect=’excel’, **fmtparams)
这里只管示例中的参数:

参数含义
csvfile一个可以迭代的对象
delimiter分隔符
quotechar字段加什么类型的字符,如果指定加”引号,那么:”Shenzhen,China”

如下:一个实例:

import csv
with open('h_r.csv','rb') as cf:
    spamreader = csv.reader(cf,delimiter = ',',
                            quotechar = '"')
    for row in spamreader:
        print row

输出如下:

['in_hour_time', 'counts']
['20170830 11', '1667']
['20170830 12', '2622']
['20170830 13', '2578']
['20170830 14', '2878']

++++++++++++++++++++++++++++
而元数据如下:

in_hour_time,counts
20170830 11,1667
20170830 12,2622
"20170830 13",2578  #这里带了引号的,而输出是不带引号的。
20170830 14,2878

3)csv.writer

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
          quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 4 + ['Bak
            ed Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam',     'Wonderful Spam'])

程序在当前目录下新建了一个eggs.csv文件,
输出如下:

Spam Spam Spam Spam  |Baked Beans|
Spam |Lovely Spam| |Wonderful Spam|



quoting=csv.QUOTE_MINIMAL

quoting的意思是指定对插入到csv文件中的一行记录所有数据加指定的字符的方式:上面是符号“|”
csv.QUOTE_MINIMAL表示只对包含在csv中需要转义的特殊字符的字段加引号

可以使用新输出的文件,试验下第一种csv.reader

with open('eggs.csv','rb') as cf:
    spamreader = csv.reader(cf,delimiter = ' ',
                            quotechar = '|')
    for row in spamreader:
        print row

该例子中,分隔符是空格。
输出如下:

['Spam', 'Spam',  'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam']

可以看出来,没有 “|”符号了吧。

4)字典写入:

import csv

with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

输出如下:

first_name,last_name
Baked,Beans
Lovely,Spam
Wonderful,Spam

还有很方法,属性,下次用到再说。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值