一、系统性学习

对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址:

python操作Excel读写--使用xlrd

官方文档

Python 使用 Xlrd/xlwt 操作 Excel

用Python读写Excel文件

二、实战

帮朋友处理一个excel,幸好数据量不大,几万条数据。需求如下:

指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中

程序如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2014-04-10 21:47:56
# @Function: 指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中
# @Author  : BeginMan

import os
import string
import xlrd
import xlwt

def get_data():
    """获取excel数据源"""
    file = r'C:\Users\Administrator\Desktop\pytool\xlrd\initial_log_data.xls'           # 改成自己的路径
    filepath = raw_input(u'请将xls文件路径粘贴进去,如果程序里已经指定了文件则按Enter键继续:')
    is_valid = False            # 验证文件
    try:
        filepath = [file, filepath][filepath != '']
        print filepath
        # 判断给出的路径是不是xls格式
        if os.path.isfile(filepath):
            filename = os.path.basename(filepath)
            if filename.split('.')[1] == 'xls':
                is_valid = True
        data = None
        if is_valid:
            data = xlrd.open_workbook(filepath)
    except Exception, e:
        print u'你操作错误:%s' %e
        return None
    return data

def handle_data():
    """处理数据"""
    data = get_data()
    if data:
        col_format = ['B', 'C', 'D']        # 指定的列
        inp = raw_input(u'请选择指定的三列,用逗号分隔,默认的是B,C,D(英文逗号,不区分大小写),如果选择默认则按Enter键继续:\n')
        try:
            inp = inp.split(',')
            col_format = [col_format,inp][len([i for i in inp if i in string.letters]) == 3]
            col_format = [i.upper() for i in col_format]                    # 转换成大写
            table = data.sheet_by_index(0)                                  # 选取第一个工作区
            nrows = table.nrows                                             # 行数
            ncols = table.ncols                                             # 列数
            str_upcase = [i for i in string.uppercase]                      # 所有大写字母
            i_upcase = range(len(str_upcase))                               # 对应的数字
            ncols_dir = dict(zip(str_upcase,i_upcase))                      # 格式成字典
            col_index = [ncols_dir.get(i) for i in col_format]              # 获取指定列所对应的索引

            # 选取的三列是否同时满足 >=1或者同时<=-1
            print u'正在检索中……'
            count = 0
            result = []
            for i in xrange(nrows):
                cell_0 = table.cell(i,col_index[0]).value
                cell_1 = table.cell(i,col_index[1]).value
                cell_2 = table.cell(i,col_index[2]).value
                if (cell_0>=1 and cell_1>=1 and cell_2>=1) or (cell_0<=-1 and cell_1<=-1 and cell_2<=-1):
                    result.append(table.row_values(i))      # 将符合要求的一行添加进去
                    count += 1
            print u'该文件中共%s行,%s列,其中满足条件的共有%s条数据' %(nrows, ncols, count)
            print u'正在写入数据……'
            col_name = col_format[0]+col_format[1]+col_format[2]
            if write_data(result, col_name):
                print u'写入成功!'
        except Exception, e:
            print u'你操作错误:%s' %e
            return None
    else:
        print u'操作失败'
        return None

def write_data(data, name):
    """写入数据,data为符合条件的数据列表,name表示指定的哪三个列,以此命名"""
    file = xlwt.Workbook()
    table = file.add_sheet(name,cell_overwrite_ok=True)
    l = 0   # 表示行
    for line in data:
        c = 0   # 表示一行下的列数
        for col in line:
            table.write(l,c,line[c])
            c += 1
        l += 1
    defatul_f = r'C:\Users\Administrator\Desktop\pytool\xlrd'       # 默认路径
    f = raw_input(u'请选择保存文件的路径:按回车跳过:')
    f_name = r'\%s.xls' % name
    filepath = [defatul_f+f_name, f+f_name][f != '']
    file.save(filepath)
    return True

def main():
    handle_data()

if __name__ == '__main__':
    main()

运行结果如下:

源数据

处理后的数据

Python操作Excel的更多相关文章

  1. python操作excel表格(xlrd/xlwt)

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  2. Python操作excel(xlrd和xlwt)

    Python操作excel表格有很多支持的库,例如:xlrd.xlwt.openpyxl.win32com,下面介绍使用xlrd.xlwt和xlutils模块这三个库不需要其他的支持,在任何操作系统上 ...

  3. Python操作excel表格

    用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...

  4. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  5. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

  6. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  7. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  8. Python 操作Excel之通过xlutils实现在保留原格式的情况下追加写入数据

    在Python操作Excel 的模块有 xlrd.xlwt.xlutils等. xlrd:读取Excel文件数据 xlwt:写入Excel 数据,缺点是Excel格式无法复用,为了方便用户,写入的话, ...

  9. python基础(六)python操作excel

    一.python操作excel,python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的 ...

随机推荐

  1. 洛谷P1738 洛谷的文件夹

    原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针 ...

  2. XE3随笔9:使用不同的数据类型标记数组

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. uglifyjs压缩JS的

    一.故事总有其背景 年末将至,很多闲适的时间,于是刷刷微博,接触各种纷杂的信息——美其名曰“学习”.运气不错,遇到了一个新名词,uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基 ...

  4. Scanf函数输入字符串

    Scanf函数输入字符串 #define _CRT_SECURE_NO_WARNINGS //#pragma warning(disable:4996) #include <stdio.h> ...

  5. cocos2d-x 之 CCArray 的遍历(3)

    cocos2d-x中CCArray的遍历,需要几个宏.现代C++程序设计建议尽量不要使用宏,所以数组的遍历也可以自己写. 但cocos2d-x官方已经提供了几个方便数组遍历的几个宏,用好了,能方便许多 ...

  6. Echarts动态加载后台数据

    注意:1.用Ajax请求获取后台数据 2.Echarts只能处理Json数据 后台Controller:根据业务需求不同而返回不同数据,我前台要循环遍历Echarts的series进行数据添加,所以后 ...

  7. 数论(poj 1401)

    题目:Factorial 题意:求N!末尾的0 的数量. 思路:10  = 2 * 5:N!中的2 的数量肯定比 5多:只需寻找5 的数量,暴力寻找TLE: 快点的方法:f(N) = N/5 + f( ...

  8. 弹出JS提示框

    弹出JS提示框Page.ClientScript.RegisterStartupScript(typeof(string), "msg", "<script> ...

  9. 配置本地IIS和VS自带IIS

    以前调试网站一直用的vs自带的IIS,做为学习没啥大碍,但要是用于团队项目开发就会带来诸多不便.团队开发项目有统一的网站端口号.文件目录什么的,端口号可以在配置文件中修改倒也没啥,但是要在自己的项目中 ...

  10. 【转载】php中iconv函数使用方法

    原文:http://www.phpweblog.net/star65225692/archive/2011/03/23/7524.html     在选择用什么工具开发,唯一的指导标准就是:用最少的人 ...