使用Python遇到的问题

Posted by huanrong on 2018-11-21

最近在学校的发展规划处参加了一小部分代码的编写工作,还好python还算简单,磕磕绊绊也算是把任务完成了。但是在毫无Python编程基础的情况下,开发过程中难免遇到问题。下面是我在程序编写的过程中遇到的问题,有些是对Python语言特性不熟悉而产生的问题,有些是自己对代码逻辑没搞懂而遇到的问题。

1 用Python操作Excel


1.1 读

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)

1.2 写

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)
#注意最后一定要保存!

1.3 单元格样式

若直接以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特性


2.1 自加/自减

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

a = a + 1 / a += 1 

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

2.2 is 与 ==

若is是True的,那么==的结果也为True
is compares for two objects in memory, == compares their values

2.3 数组的初始化

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

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

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

2.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()

2.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)”的格式。

2.6 小数输出为百分号格式

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

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