当前位置:   article > 正文

零基础使用Python读写处理Excel表格_sheet1.write(i, j, k)

sheet1.write(i, j, k)

一、安装Python

首先当然是配环境,如果你用的是Windows系统,那就还需要配置一下Python的环境了,我的Python版本是2.7。

二、安装第三方库

Python自己是不支持直接操作Excel的,但是Python强大之处就在于有大量好用的第三方库,这里我们选用读Excel的xlrd库和写Excel的xlwt库来操作。

关于第三方库的安装很简单,首先,去专门下载Python库的网站下载两个库的源码: 
* 下载xlrd 
* 下载xlwt

注意对于新手来说最简单的安装方式就是源码安装,不需要去折腾第三方库的管理器,直接点击这个先下载两个库的源码:

将下载的压缩文件解压到指定文件夹下,在cmd控制台中使用cd命令将路径切换到解压文件中,执行setup.py install命令,就会看到一系列安装信息

三、安装Sublime Text3 ,并搭建python环境

1. 安装Sublime Text3,

2. 搭建Python环境。打开 Tools > Build System > New Build System,输入以下代码:

  1. {
  2. "encoding": "utf-8",
  3. "working_dir": "$file_path",
  4. "shell_cmd": "D:\\software\\Python\\python.exe -u \"$file\"",
  5. "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
  6. "selector": "source.python"
  7. }

3. 保存搭建好的环境。Ctrl + S 直接保存为想要命名的编译名称,此处我保存为python 2

4.选择刚刚搭建好的环境。重启 Sublime text 3 选择 python 2 。

5.测试环境是否搭建成功。按Ctrl+N创建一个程序,再按Ctrl+S保存,命名为xx.py,写上一段代码,按Ctrl+B观察是否运行成功。

三、写代码

读写Excel的第三方库都安装好了,就可以开始写代码了。

我们在一个文件夹下创建一个 hello.py 文件,然后用sublime之类的文档编辑器打开它,开始编写代码。(PS:Python中 # 号开头表示注释)

读Excel

  1. # -*- coding: utf-8 -*-
  2. import xdrlib ,sys
  3. import xlrd
  4. #打开excel文件
  5. def open_excel(file= 'test.xlsx'):
  6. try:
  7. data = xlrd.open_workbook(file)
  8. return data
  9. except Exception,e:
  10. print str(e)
  11. #根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的索引 ,by_name:Sheet1名称
  12. def excel_table_byname(file= 'test.xlsx', colnameindex=0, by_name=u'Sheet1'):
  13. data = open_excel(file) #打开excel文件
  14. table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
  15. nrows = table.nrows #行数
  16. colnames = table.row_values(colnameindex) #某一行数据
  17. list =[] #装读取结果的序列
  18. for rownum in range(0, nrows): #遍历每一行的内容
  19. row = table.row_values(rownum) #根据行号获取行
  20. if row: #如果行存在
  21. app = [] #一行的内容
  22. for i in range(len(colnames)): #一列列地读取行的内容
  23. app.append(row[i])
  24. list.append(app) #装载数据
  25. return list
  26. #主函数
  27. def main():
  28. tables = excel_table_byname()
  29. for row in tables:
  30. print row
  31. if __name__=="__main__":
  32. main()

这个代码很多我都注释了,只讲几个要注意的地方,首先最开始我们设置了utp8编码,然后一定要记得导入xlrd包,这样才能使用它的函数去读取excel。里面的 main() 是主函数,python 会运行这个函数,这个函数调用了其余的函数来读取数据。这个代码实现的是将excel文件 test.xlsx 中的 Sheet1 表中的数据一行行读取出来并打印。

Excel中内容如下: 

创建Excel

使用xlwt库我们可以创建一个Excel:

  1. # -*- coding: utf-8 -*-
  2. import xlwt
  3. def testXlwt(file = 'new.xls'):
  4. book = xlwt.Workbook() #创建一个Excel
  5. sheet1 = book.add_sheet('hello') #在其中创建一个名为hello的sheet
  6. sheet1.write(0,0,'cloudox') #往sheet里第一行第一列写一个数据
  7. sheet1.write(1,0,'ox') #往sheet里第二行第一列写一个数据
  8. book.save(file) #创建保存文件
  9. #主函数
  10. def main():
  11. testXlwt()
  12. if __name__=="__main__":
  13. main()

这个代码更简单,同样记得要在开头导入库。

代码中我们创建了一个excel,在其中添加一个sheet,写入两个数据,最后按照我们的命名保存了文件。

按照上面同样的方法运行代码后,终端中不会有打印的内容,但是我们去文件夹中看会得到一个名为 new.xls 的新excel文件,打开可以看到:

值得注意的是,xlwt库只能创建 xls 的文件格式,不能创建现在的 xlsx 格式,其实有点老了,如果你把文件名写了 xlsx 格式,将会无法打开。

处理Excel内容

其实单独的读和写只是基本功,我们最终是想要处理Excel中的内容的。

这里我们假设一个使用场景,我们希望将Excel中所有第一列和第二列相同的行数据筛选出来保存到一个新的Excel中去。

那么我们的流程是:

打开目标Excel
读取内容
读取每一行的同时筛选第一列和第二列相等的行保留下来
创建一个新Excel
将筛选出来的内容写进去
保存新Excel
那么我们看代码:
 

  1. # -*- coding: utf-8 -*-
  2. import xdrlib ,sys
  3. import xlrd
  4. import xlwt
  5. #打开excel文件
  6. def open_excel(file= 'test.xlsx'):
  7. try:
  8. data = xlrd.open_workbook(file)
  9. return data
  10. except Exception,e:
  11. print str(e)
  12. #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的索引 ,by_index:表的索引
  13. def excel_table_byindex(file= 'test.xlsx',colnameindex=0,by_index=0):
  14. data = open_excel(file) #打开excel文件
  15. table = data.sheets()[by_index] #根据sheet序号来获取excel中的sheet
  16. nrows = table.nrows #行数
  17. ncols = table.ncols #列数
  18. colnames = table.row_values(colnameindex) #某一行数据
  19. list =[] #装读取结果的序列
  20. for rownum in range(0,nrows): #遍历每一行的内容
  21. row = table.row_values(rownum) #根据行号获取行
  22. if row: #如果行存在
  23. app = [] #一行的内容
  24. for i in range(len(colnames)): #一列列地读取行的内容
  25. app.append(row[i])
  26. if app[0] == app[1] : #如果这一行的第一个和第二个数据相同才将其装载到最终的list中
  27. list.append(app)
  28. testXlwt('new.xls', list) #调用写函数,讲list内容写到一个新文件中
  29. return list
  30. #将list中的内容写入一个新的file文件
  31. def testXlwt(file = 'new.xls', list = []):
  32. book = xlwt.Workbook() #创建一个Excel
  33. sheet1 = book.add_sheet('hello') #在其中创建一个名为hello的sheet
  34. i = 0 #行序号
  35. for app in list : #遍历list每一行
  36. j = 0 #列序号
  37. for x in app : #遍历该行中的每个内容(也就是每一列的)
  38. sheet1.write(i, j, x) #在新sheet中的第i行第j列写入读取到的x值
  39. j = j+1 #列号递增
  40. i = i+1 #行号递增
  41. # sheet1.write(0,0,'cloudox') #往sheet里第一行第一列写一个数据
  42. # sheet1.write(1,0,'ox') #往sheet里第二行第一列写一个数据
  43. book.save(file) #创建保存文件
  44. #主函数
  45. def main():
  46. tables = excel_table_byindex()
  47. for row in tables:
  48. print row
  49. if __name__=="__main__":
  50. main()

这次我们开头要导入xlrd和xlwt两个库,因为既要读也要写。

代码内容基本与上面两个差不多,有一点点加深,在读取的时候我们判断了第一列和第二列数据相同的行才加到list中去。在写的时候我们用了两个for循环来对新excel中的一个个单元格写数据,使用了i和j两个变量来记录位置。此外在获取sheet的时候,与上面的不同,这里是通过sheet的序号(这里是0)来获取的,上面的是通过sheet名称来获取。

我们要处理的Excel中的内容是这样的:

按道理我们筛选后只应该保留第一行的内容,运行完后我们得到了一个新的Excel文件,里面的内容如下:

可以看到和预期是相符的。

这里只是简单的例子,两个库的操作还有很多,能够进行的处理也有很多,如果要处理大量数据,可能还要考虑内存,分批次来处理,总之,本文只是一个入门,尽量追求零基础也能学着使用来解放劳动力,更多的用法,就看自己琢磨了。

可以下载示例工程:https://github.com/Cloudox/PYReadWriteExcelDemo

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/158895
推荐阅读
相关标签
  

闽ICP备14008679号