今天,也是在学编程的一天,但却接到了来自了学生会的任务。把一个excel表的内容复制到另一个excel表中,当然,还需要处理再复制,原表与新表的格式不一样。没办法,没时间学编程,干脆就用今天这个任务来学编程吧。
于是 我今天学到如下知识(先总结一下学到了什么):对excel的读取和写入,去除列表中的’’,把列表映射为字典(dict函数的用法),把一个列表分成子列表,下面就一个一个的去总结它们:
一.对excel的读取和写入:
刚开始我就是学习的这个,读取excel文件和写入excel文件。
读取excel文件及去除列表中的’’:
使用的模块:xlrd
直接看程序:
# -*-coding:utf-8 -*-
import xlrd
import xlwt
import xlutils.copy
def read_excel():
workbook = xlrd.open_workbook(
r'E:\test.xls')
//获取excel文件中表的名字
print(workbook.sheet_names())
//获取excel表中的第一张表,通过index来获取,index从0开始编号
sheet2 = workbook.sheet_by_index(0)
//获取excel表中的第一行,行数从0开始编号。
rows = sheet2.row_values(0)
//获取excel表中的第一列,列数从0开始编号
cols = sheet2.col_values(0)
//for in 迭代打印第一行
/* for row in rows:
print(row)*/
//直接打印第一列
print(cols)
if __name__ == '__main__':
read_excel()
注意:这里我遇到了第一个错误:输出结果是:Process finished with exit code 0
这个意思是程序执行完成了。
然后就没有任何输出了。这是怎么回事呢,原来是我创建项目时配置出了问题。我使用的是pycharm ,刚刚使用的是pycharm提供的虚拟解释器。又因为test.xls文件不是在虚拟环境中的所以就没有输出。
如果点上面红色的地方就是使用的虚拟环境,第一次使用没有设置为下面的自己下载的解释器的话,就会默认为虚拟环境,需要将环境切换到自己下载的解释器。
然后就可以正常输出了:输出了第一行的内容
可以看到输出的棋种中有很多的 ‘’,这是因为test.xls 中的表格格式造成的。而我们只需要将棋种名称提取出来,然后写到另一个表格中,因此就需要把这个列表里面的’'给去除。去除方法如下:
直接看代码
def remove_(the_list):
while '' in the_list:
the_list.remove('')
有其他方法,但是去除效果不好,总会留几个’'在列表中。这里我们需要的第一列,就只打印了第一列
def read_excel():
workbook = xlrd.open_workbook(
r'E:\test.xls')
print(workbook.sheet_names())
sheet2 = workbook.sheet_by_index(0)
cols = sheet2.col_values(0)
remove_(cols)
print(cols)
if __name__ == '__main__':
read_excel()
向另一个excel表中写入数据
接着我们把上面处理和的数据写入另一个excel中。网上还有很多方法,自己选择一种就可以了,大同小异
def write_excel():
//打开要写入的excel
rb = xlrd.open_workbook('F:\\test1.xls')
wb = xlutils.copy.copy(rb)
写入该excel的第一张表中
ws = wb.get_sheet(0)
//得到数据
cols1 = read_excel()
//循环写入
for i in range(1, len(cols1)):
ws.write(i + 1, 0, cols1[i])//写入第一列(i+1表示行数,0表示第一列)
//保存(另存为)
wb.save('F:\\test1.1.xls')
运行结果如下:
二.把一个列表分为子列表
直接看代码:`
def func(the_list, childrenlist_len):
for i in range(0, len(the_list), childrenlist_len):
yield the_list[i:i + n]
这里重点介绍yield在此处的用法
yield的英文单词是生产,就是生成器的意思。先看一个小例子
def addlist(alist):
for i in alist:
yield i + 1
这里yield可以为函数返回值塞数据,去除adlist中的每一项,把i+1塞回原位,因此上面这个分为子列表也是一样的原理。
当然yield的用法不止这一个,这一次我只是初识yield,真要深入总结我们得总结一篇博客才能把这个总结清楚。
三.字典的生成和遍历(dict函数的用法):
一共有三种方法:
/*class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
**kwargs -- 关键字
mapping -- 元素的容器。
iterable -- 可迭代对象。*/
//示例代码
dict1 = {} 创建一个空字典
dict1 = dict(a='a',b='b')
//{'a': 'a', 'b': 'b'}
dict1 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
//{'three': 3, 'two': 2, 'one': 1}
dict1 = dict([('one', 1), ('two', 2), ('three', 3)]
//{'three': 3, 'two': 2, 'one': 1}
这里还需要再总结一下zip函数
zip函数:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同(所以就可以理解上面的用法了)
遍历字典:
for key, value in a.items():
print(kv)
print(value)
重点总结这种,可以遍历整个字典,key放关键字,value放值。其他的方法是用key遍历关键字,再用dict[key]遍历值。
当然可以单独遍历 dict.ket, 和dict.value,没什么好总结的,跟遍历列表一样的方法:for in语句。
今天总结就这样了,我要去继续学我的新东西了。拜拜
如果有任何错误,欢迎指正
非常感谢。