开始python基础之前,跟大家分享一个经验(英语大神可以忽略),我也是一个英语渣渣,当初刚刚接触python的时候,它也恶心了我一段时间,什么报错,提示都是英文,当时就是挺郁闷的。因为现在很多优秀的软件,语言都是国外的,为了学好编程,英语这一关你必须得去正视,得跨过去,然后我不得不下载一个翻译软件,撸码的同时打开它,遇到什么不懂得可以立刻查。我的经验告诉你只要你想学好编程,英语这道坎并不是你的借口,因为一门语言常用的单词无非就是那些,第一次不懂查一下软件,看多几次,你渐渐就能克服“恐英”症了(个人经历,仅供参考)。一万个理由都是借口,好好加油(这是跟我自己说的,哈哈哈)

上一篇文章也说到python是一门“胶水”语言,功能强大,应用领域广泛。Arcgis选择其作为脚本语言之一很大程度上也是因为python具有以下优点:

简单易学:相对于其他高度结构化的编程语言,python相对来说比较简单,容易被掌握。他的语法简单,没有太多的条条框框,编程者将会有更多的时间解决实际问题。

免费且开源:python是一门免费的软件,这就大大降低了我们的学习成本。另外,他是开源的,换句话来说,它拥有强大的资源来源,因为它有一个十分活跃的用户社区,社区成员都积极参与到python的开发与维护。它有丰富的现成第三方类库,这就使我们可以直接使用,从而跳过了“造轮子”的苦恼。

跨平台:python支持Windows、Mac、Linux在内的各种平台,而且程序只需要修改一小部分就可以在其他平台上正常运行。

解释性:python是一门解释性语言,不需要编译就可以直接运行,这使python使用起来非常简单。

面向对象:面向对象的编程不再是功能的堆砌,而是由一系列相互作用的对象构建起来的。

现在的python共存两个版本:python2.x和python3.x;至于为什么会有这两个版本的博弈,有兴趣的可以去了解一下中间的故事。两个版本可以说各有千秋吧,两者之间大同小异,所以说学哪个版本都没关系,因为只要掌握其中一个,另一个很快就可以转过来。虽然现在的趋势是python3.x,但是因为Arcgis绑定的版本是python2.6(Arcgis10.0版本)或者python2.7(Arcgis10.2版本),所以我这里用的是python2.x版本。python2.x版本最大的问题就是对中文的兼容不太友好。其他的不多说,直接上码(撸码最实际),编程环境为在Windows10系统+python2.6

中文编码:

在python自带的IDLE窗口中输入下面代码

print “hello world”

运行后的结果如下

hello world

如果输入的代码为:

print “你好,中国”

运行后将会出错,得到结果为:

File “D:/ArcPy/python����.py”, line 2SyntaxError: Non-ASCII character ‘xe4′ in file D:/ArcPy/python����.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

这里涉及的知识点有:print语句是用于输出内容的,其中”hello world”和”你好,中国”用双引号括起来是因为他们表示的数据类型为字符串;字符串除了可以用双引号“ ”,还可以用单引号‘ ’或者三引号”’ ”’;不过他们三个都要一对出现,同时使用他们之中的两个或者三个的时候要特别注意。

print “你好,中国”运行出错,是因为代码中包含了中文字符,python默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。解决方法为只要在文件开头加入# –– coding: UTF-8 –或者#coding=utf-8就行了。修改后如下:

#coding=utf-8print “你好,中国”

运行后输出的结果为:

你好,中国

变量命名规则:

可以有数字,字母,下划线组成。

不能以数字开头。

python中的关键词不能用。

使用描述性的变量名,易于编写与解读。

尽量简短。

数据类型:

数字:python的数字主要有整数和浮点数两种,两者区别就是有没有小数。数字的运算与其他语言的差不多;下面看下面的一些例子

2+4    #加法

6

5-3    #减法

2

5-2.0

3.0

5*3    #乘法

15

6/3  #除法

2

7/2      #注意区分  7/2.03

7/2.0

3.5

7%2      #取模

1

注意 :python的数据类型与其他语言有很大的区别,它的定义不需要在变量名前声明数据类型,python是自动识别数据的类型。所以在进行运算的时后会出现7/2 与7/2.0的区别。

字符串:上文也说到字符串使用单引号(‘ ‘)、双引号 (” “)、或者三引号 (”’ ”’)括起来的数据类型。

print “hello world!”    #单引号,双引号,三引号都是英语符号,否则会报错

hello world!

print’您好,中国!’

您好,中国!

print ”’hello world!”’

hello world!

print“hello world!”    #用了中文的符号报错

SyntaxError: invalid syntax    #字符串的连接要确保彼此都是字符串,否则会报错。例如字符串与int类型连接

print “我今年”+20+”岁了”  

 Traceback (most recent call last):  File “”, line 1, in     print “我今年”+20+”岁了”  #字符串的连接要确保彼此都是字符串,否则会报错TypeError: cannot concatenate ‘str’ and ‘int’ objects#正确的连接应该如下

print “我今年”+”20″+”岁了”

我今年20岁了

print “我今年”+str(20)+”岁了”

我今年20岁了

字符串处理:

mytext=”GIS is cool”

print mytext.upper()  #upper方法把所有小写转换为大写

GIS IS COOL

print mytext.lower()    #lower方法把所有大写转换为小写

gis is cool

print mytext.lower()    #lower方法把所有大写转换为小写

gis is cool

print mytext.title()    #title使字符串标题化,所有单词首字母大写

Gis Is Cool

mytext[0]        #通过字符串的索引提取字符(切片)

‘G’

mytext[2:]        #获取第三个字符开始获取,直到最后

‘S is cool’

mytext[-1]            #获取最后一个字符’l’#find()方法用于查找字符串中的某个字符或者字符串,区分大小写,返回找到的第一个索引

mytext.find(“is”)  

4         #in 的用法与find差不多,也是判断是否包含某个字符串,返回值为bool类型

“GIS” in mytext 

True

mylist=[“I”,”am”,”a”,”GIS”]

str=””

str.join(mylist)  #join方法将字符串列表中的所有元素合并为一个新的字符串’IamaGIS’#split方法刚好与join相对,它是把一个字符串按照一定的规则分割后转为列表,这里为空格(” “)

mytext.split(” “)

[‘GIS’, ‘is’, ‘cool’]

列表:列表是由方括号[ ]来定义的;列表的每一个元素用逗号(,)隔开;这些元素可以是数字、字符串或者其他数据类型。

list=[1,2,3,4,5]#定义一个列表list

print list        #输出列表

[1, 2, 3, 4, 5]   #元素的数据类型可以不一致

print[1,2,”a”,”b”,6,7]

[1, 2, ‘a’, ‘b’, 6, 7]

列表的简单操作:

list.append(“zfc”)            #增加元素

print list

[1, 2, 3, 4, 5, ‘zfc’]

list.extend(“jpg”)            #注意与append()对比

print list

[1, 2, 3, 4, 5, ‘zfc’, ‘j’, ‘p’, ‘g’]#在对应的位置插入元素,0是列表的索引,表示第一位

list.insert(0,”xyz”)

print list

[‘xyz’, 1, 2, 3, 4, 5, ‘zfc’, ‘j’, ‘p’, ‘g’]

list.remove(3)    #删除

print list

[‘xyz’, 1, 2, 4, 5, ‘zfc’, ‘j’, ‘p’, ‘g’]

list[2:4]    #列表同样可以通过索引来切片[2,4]表示截取第三个元素至第四个元素

[2, 4]

list[3]

4

类似的操作列表的方法还有很多,可以根据需要自行通过help()函数进行查看;另外我们也不用死记它每一个方法的单词怎样拼写,因为有些编辑器有强大的补全提示功能,如下图1

图1

例如通过help(list)列出列表的常用方法的介绍如下:

append(…)

| L.append(object) — append object to end

|

| count(…)

| L.count(value) -> integer — return number of occurrences of value

|

| extend(…)

| L.extend(iterable) — extend list by appending elements from the iterable

|

| index(…)

| L.index(value, [start, [stop]]) -> integer — return first index of value.

| Raises ValueError if the value is not present.

|

| insert(…)

| L.insert(index, object) — insert object before index

|

| pop(…)

| L.pop([index]) -> item — remove and return item at index (default last).

| Raises IndexError if list is empty or index is out of range.

|

| remove(…)

| L.remove(value) — remove first occurrence of value.

| Raises ValueError if the value is not present.

|

| reverse(…)

| L.reverse() — reverse IN PLACE

|

| sort(…)

| L.sort(cmp=None, key=None, reverse=False) — stable sort IN PLACE;

| cmp(x, y) -> -1, 0, 1

字典:

字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示

d = {key1 : value1, key2 : value2 }

字典的条目与顺序无关,可以修改,但关键字唯一,对应的值不唯一,创建的同时可以赋值

字典的操作:

#字典的创建(带有中文,而没有进行编码的转换,所以“男”的输出为xc4xd0)

dict={“name”:”zfc”,”Age”:20,”sex”:”男”} 

 >>> print dict

{‘Age’: 20, ‘name’: ‘zfc’, ‘sex’: ‘xc4xd0’}

print dict[“name”]    #通过字典的键获取对应的值zfc

print dict

[“Age”]20

print dict.keys()      #keys()获得字典的所有键[‘Age’, ‘name’, ‘sex’]

print dict.values()    #values()获得字典所有值

[20, ‘zfc’, ‘xc4xd0’]

print dict.items()    #items()以列表的形式返回字典的键和值

[(‘Age’, 20), (‘name’, ‘zfc’), (‘sex’, ‘xc4xd0’)]

dict[“Age”]=23          #通过键直接修改值

print dict{‘Age’: 23, ‘name’: ‘zfc’, ‘sex’: ‘xc4xd0’}

dict[“adress”]=”Guangdong”  #增加字典的元素

print dict

{‘Age’: 23, ‘adress’: ‘Guangdong’, ‘name’: ‘zfc’, ‘sex’: ‘xc4xd0’}

del dict[“sex”]          #删除键为”sex”的条目

print dict

{‘Age’: 23, ‘adress’: ‘Guangdong’, ‘name’: ‘zfc’}

dict.clear()              #清空字典

print dict{}

del dict                #删除字典

print dict

元组:

Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

tup=(1,2,3,”a”,”b”)  #元组的创建与输出

print tup(1, 2, 3, ‘a’, ‘b’)

tup2=”a”,”b”,”c”,”f”

print tup2(‘a’, ‘b’, ‘c’, ‘f’)

元组的处理方式类似列表,但是元组是不能修改的(增、删、改),所以要改变元组的处理方式就不能用;一般来说,如果不需要修改元素的值或顺序的就用元组,否则就用列表。

写这文章也只是简单的介绍了python在Arcgis中常用到的知识,全部深入的介绍也不现实,只要在你遇到问题的时候,你能够记起用什么方法能够解决这个问题,而且很快找到它就好。因为知识无穷多,而且在不断的更新换代,个人感觉按照需求学习就好,一个人的精力有限,不可能面面俱到,把一样东西学好,学精并在此基础上往相关的的拓展就可以了。如果想深入的学习python,可以根据文末的链接进行学习,网上关于python基础的教程也有很多。

最近实习都在学基于C#的Arcgis engine的二次开发,又是新的知识,又是英语比较多,被它虐得不要不要的,所以只能周末才有空进行更新。另外,建议不要同时学两们语言,特别是新手,因为很容易搞混。如果有编程基础,对比着学python还是挺好的,不要同时学就好。(现在我有时就不能很快的从C#转回python当中。很尴尬。。。。。。)

基于ArcGIS的python编程相对于python的其他编程来说,对python的要求并不是很高,你只需要了解python的数据类型,常用的语句,语法规则就好。其的侧重点会是Arcgis相关的函数,因为这些函数都相当于桌面版的一个个工具,这就要求你必须了解工具的含义,作用,地理含义等;这或许就是我们GIS开发的一大难点或者价值所在,那时我也在问自己:现在计算机学院科班出身的程序员一大堆,而相对于我们这些“外行人”来说搞编程,编程能力怎样跟他们竞争?这也是值得思考的。(以上三段纯属自己的废话,嘻嘻)

有什么出错的地方。欢迎大家一起交流,一起学习,一起进步!

本文参考书籍:《面向ArcGIS的python脚本编程》(有需要的也可联系我)

最后介绍几个相关的参考资料:

ArcGIS 在线帮助文档(10.2、10.2.1 和 10.2.2)

python基础教程|菜鸟教程

廖雪峰老师的python基础教程

文章来源于互联网,如有雷同请联系站长删除:基于ArcGIS的python编程:2.python基础(一)

发表评论