最近在学校的发展规划处参加了一小部分代码的编写工作,主要功能逻辑是把从ESI上下载下来的各领域表中的数据进行分析。说是让我接手前人所做的工作,却发现给我的资料当中只有两个exe文件,没有任何源码,只好从头写起。虽说不涉及爬虫,也不是很难,但是要处理这么多数据,要生成这么多表确实还挺烦的,加之我毫无Python编程基础,在项目编写过程中难免遇到问题,下面是我在程序编写的过程中遇到的问题,有些是对Python语言特性不熟悉而产生的问题,有些是自己对代码逻辑没搞懂而遇到的问题。

1. 用Python操作Excel

import xlrd
cwd = os.getcwd()
FilePath = cwd + "\\file.xls"
File = xlrd.open_workbook(FilePath)
sheet = File.sheet_by_index(0)
#获得某个cell的值
sheet.cell_value(x, y)

import xlwt
FilePath = cwd + "\\file.xls"
File = xlwt.Workbook(encoding = 'utf-8', style_compression = 0)
sheet = File.add_sheet('sheet0', cell_overwrite_ok = True)
#写单元格
sheet.write(x, y, content, style)
#单元格合并
sheet.write_merge(x1, x2, y1, y2, content, style)
#即合并x1到x2列、y1到y2行(含x2与y2)的单元格,网上解释的十分复杂,但是逻辑非常简单的
File.save(FilePath)
#注意最后一定要保存!

单元格样式

#若直接以style()作为write的参数,每次运行一行write都会创建一个新的style对象,程序会报错,比较保险的方法是在使用之前先创建一个style对象,用的使用直接使用style对象作为参数传入即可。
StyleDefault = style()
sheet1.write(0,0, content1, StyleDefault)
sheet1.write(1,1, content2, StyleDefault)
sheet1.write(2,2, content3, StyleDefault)
#设置单元格宽、高
sheet.col(1).width = 4000
sheet.row(1).height = 3000

2. Python特性

(1)自加/自减

编写代码过程中发现Python并没有其他语言中很常见的++、--运算符,于是查了资料,才知道python是以内容为基准的,而不像C/C++以变量为基准,同一个数字5可以用多个名称来访问,a=5和b=5指向的都是同一个对象(可以使用id()观察发现)。这样的逻辑就决定了数字类型的值是无法改变的,也就无法使用自增自减运算符。

正确的自增:a = a + 1 / a += 1

其中,python有个整数池,默认1~256的数字都属于这个整数池,这些每次赋值的时候,是取得池中的整数对象。

(2)is 与 ==

若is是True的,那么==的结果也为True

is compares for two objects in memory, == compares their values

(3)数组的初始化

Python中不能直接使用一个没有初始化的数组,一维数组的初始化比较简单,直接用0代表初始元素即可,如a = [0] * 10。二维数组的初始化主要有这几种方式:

[([0] * 3) for i in range(4)]
[[0for col in range(3)] for row in range(4)]

创建一个4行3列的二维数组

(4)关于List

Python中的List与Array不同,同一个List里的元素数据类型可以不同,其实它保存的就是指针的集合,而非数据本身。Array是numpy当中封装的,转换关系如下:

a=np.array([1,2,3,4,5]) #List转换为Array
b=np.array([[1,2,3],[4,5,6]]) #List转换为二维Array
c=list(a) #Array转换为List

List的排序方法是sort(),如果要降序排序,则需要添加一个(reverse=True)参数,如:list1.sort(reverse=True)

当List作为参数传入一个函数时,是作为实参传入的,如果在函数内操作该List时,原来的List也会发生变化,要生成这个List的副本,使用copy()方法即可,如list2 = list1.copy()

(5)循环操作

比较常用的是for循环,与其他语言的循环语句不同,Python的循环语句是“for i in range(10)”或“for i in range(0, 10)”的形式,要注意的是后一个参数是不包括在判断当中的,相当于“for(i = 0, i < 10; i++)”。若要遍历一个List当中的元素同时获得该元素对应的index,则需要使用“for i, item in enumerate(List1)”的格式。

(6)小数输出为百分号格式

decimal = "%.2f%%" % (num * 100)

主要先是这些问题,日后想到再补充……