如何使用Python实现SHP按照某一字段python 批量输出 csv

ArcGIS学习笔记(02):按字段属性批量生成shp文件
已有 8639 次阅读
|个人分类:|系统分类:|关键词:ArcGIS
最近遇到一个问题,需要从一幅省级行政区的中国地图中提取出所有省级行政区的单独shp文件。
解决这个问题的方法,可以是选中某一个省级行政区,然后右键→导出,把这个省级行政区导出为独立的shp文件。但是这样没有批处理功能,只能一个个操作。中国有34个省级行政区,需要这样操作34次。如果换成地级、县级行政区,则工作量太大了。
解决这个问题实际上是通过字段属性批量生成shp文件的操作。可以使用如下操作实现。
(1)打开ArcToolBox,选择分析工具→提取→分割
(2)在“输入要素”和“分割要素”中都选择这幅有省级行政区边界、每个省级行政区边界都是面要素的中国地图,相当于用自己切割自己。
  在“分割字段”中选择具有唯一标识的字段,例如省级行政区名、行政区代码名等,要求这个字段的属性为字符串,它将作为生成的shp文件的文件名。如果可以的话,可以设置专门的用于文件名的字段。
  在“目标工作空间”中选择这些shp文件将要保存的文件夹。
(3)点“确定”。
转载本文请联系原作者获取授权,同时请注明本文来自翁建武科学网博客。链接地址:
上一篇:下一篇:
当前推荐数:0
评论 ( 个评论)
扫一扫,分享此博文
作者的其他最新博文
热门博文导读
Powered by
Copyright &前面一篇(使用实现子区域数据分类统计)讲述了通过geopandas库实现对子区域数据的分类统计,说白了也就是如何根据一个shp数据对另一个shp数据进行切割。本篇作为上一篇内容的姊妹篇讲述如何采用优雅的方式根据一个shp数据对一个栅格影像数据进行切割。废话不多说,直接进入。
二、涉及到的技术
本方案涉及以下技术点:
geopandas:已经在上一篇文章中简单介绍。
numpy:这是一个开源的数据分析处理库,非常高效、简洁。
rasterio:这是一个开源的影像处理库,非常好用,基本涵盖了常用的功能。也可以配合numpy进行数据计算。
datashader:这是一个开源的大数据可视化库,可以进行遥感影像、矢量数据的可视化。其基于bokeh,bokeh是一个通用的可视化工具,有兴趣的可以参考github,我之前采用Scala语言对其进行了简单的封装,请参考使用bokeh-scala进行数据可视化以及使用bokeh-scala进行数据可视化(2)。
本文基本涉及以上技术。另,最近Github貌似被墙了,所以你懂的。推荐使用Lantern,请自行之。
三、优雅切割
为什么叫优雅的切割,其实我这里倒不是卖弄文字,主要是为了与Gdal的方式相区别。传统的方式可以采用Gdal命令行进行一点点的手动处理,稍微智能化一点可以在python中发送控制台语句的方式调用gdal命令。作为我们都是想采用最简单、最不需要操作、看上去最舒服的方式。所以我这里称其为优雅的方式。
我们大致需要经历读取影像、投影转换、读取shp、切割、显示等几个步骤。下面逐一介绍。
3.1 读取影像
采用rasterio进行影像读取。代码如下:
import rasterio as rio
band = rio.open(path)
非常简单,只要传入影像的路径即可。rasterio支持tif、hdf格式(亲测)。
3.2 投影转换
这是比较难的一块,需要注意很多细节。代码如下:
from rasterio.warp import (reproject,RESAMPLING, transform_bounds,calculate_default_transform as calcdt)
affine, width, height = calcdt(src.crs, dst_crs, src.width, src.height, *src.bounds)
kwargs = src.meta.copy()
'crs': dst_crs,
'transform': affine,
'affine': affine,
'width': width,
'height': height,
'geotransform':(0,1,0,0,0,-1) ,
'driver': 'GTiff'
dst = rio.open(newtiffname, 'w', **kwargs)
for i in range(1, src.count + 1):
reproject(
source = rio.band(src, i),
destination = rio.band(dst, i),
src_transform = src.affine,
src_crs = src.crs,
dst_transform = affine,
dst_crs = dst_crs,
dst_nodata = src.nodata,
resampling = RESAMPLING.bilinear)
首先使用calculate_default_transform函数计算投影转换后的影像尺寸以及仿射变换参数。其中src表示原始影像,src.crs可以取到原始投影,dst_crs位定义的目标投影,与上一篇中介绍shp投影变换时基本一致。
然后计算投影后的tiff元数据信息。src.meta.copy()读出原始元数据信息并进行拷贝,kwargs.update将原始元数据更新为目标元数据。
dst = rio.open(newtiffname, 'w', **kwargs)打开一个新的影像其模式w表示写入。
最后循环原始影像的所有波段,逐一进行投影变换并写入新的影像。其参数一目了然,不再赘述。
上一个影像的整体截图,以与下述切割后的效果进行对比。
3.3 读取shp
这在上一篇文章中也已经做了详细描述,不再赘述,需要强调的时此处也需要将shp进行投影转换,使其与我们要处理的影像一致,所以简单的方式就是直接读取影像的投影信息,将shp数据转换到此投影,详情请参考使用Python实现子区域数据分类统计。
我们要对一个完整的影像进行切割,可以分为两步。首先将shp数据转换为geojson,然后使用rasterio进行切割。
3.4.1 shp数据转换为geojson
rasterio进行切割时需要传入的时geojson对象,而不是普通的GeoSeries对象,所以我们需要进行一步转换。代码如下:
from geopandas import GeoSeries
features = [shpdata.geometry.__geo___]
其中shpdata为读出的shp数据对象。如果我们想要获取shp中的某条数据而不是全部,可以采用如下方式:
from geopandas import GeoSeries
features = [GeoSeries(shpdata.geometry[i]).__geo_interface__]
其中i表示的是取出的序号,最后都要采用[]将结果变成数组,因为rasterio最后需要传入一个数组参数。
3.4.2 使用rasterio进行切割
其实有了前面的准备这一步也就变的简单了,直接调用rio.mask.mask函数,该函数返回该栅格数据与features相交部分的数组结果以及变换信息。代码如下:
import rasterio.mask
out_image, out_transform = rio.mask.mask(src, features, crop=True, nodata=src.nodata)
out_meta = src.meta.copy()
out_meta.update({&driver&: &GTiff&,
&height&: out_image.shape[1],
&width&: out_image.shape[2],
&transform&: out_transform})
band_mask = rasterio.open(newtiffname, &w&, **out_meta)
band_mask.write(out_image)
其中src为切割前的影像数据,features为上一步得到的shp数据转换后的geojson,crop表示是否对原始影像进行切割,如果为True表示将该geojson的外界框以外的数据全部删除,既缩小原始影像的大小,只保留外界框以内部分,nodata表示无值数据,凡是geojson外部的数据都会转换成此值。
后面的基本与投影转换后的一致,根据切割的结果生成一个新的影像数据。这样我们就实现了根据shp数据对遥感影像进行切割。效果如下:
本文所介绍的技术可以用于对全国的影像数据进行分省切割,或者省的影像数据进行县市切割等。同理与上一篇文章一致的是凡是这种处理子区域的方式都可以采用此技术。当然本文没有介绍如何对遥感影像进行处理,其实非常简单,当我们读出影像数据之后,其就是一个numpy的array对象,已经变成了纯数学问题,处理完之后只需要附加投影等信息写入新的tiff文件即可。当前位置: >>
用 Python 批处理 Clip 分析#===================================================== # 工具名称:Batch Clip # 工具描述:对 inputWorkspace 下的要素类(shp 或者 geodatabase) # 用 clipFC 进行 Clip 分析,并将结果存储在 outputWorksp
ace 路径下。 #===================================================== import arcgisscriptinggp = arcgisscripting.create(9.3) def rewriteWorkspace(workspace): if(not workspace.endswith(&\\&)): workspace += &\\& return workspace def getClippedFCName(outputWorkspace, inputFC):if(inputFC.find(&.shp&) & 0): return inputFC.replace(&.shp&, &_Clip.shp&) else: return inputFC + &_Clip& def batchClip(inputWorkspace, clipFC, outputWorkspace): inputWorkspace = rewriteWorkspace(inputWorkspace) utputWorkspace = rewriteWorkspace(outputWorkspace) #set workspace gp.workspace = inputWorkspace #list feature classes and do the cliping job fcs = gp.ListFeatureClasses() for fc in fcs: if(inputWorkspace + fc != clipFC):gp.clip_analysis(fc, clipFC, getClippedFCName(outputWorkspace, fc)) geoprocessing 中使用 python 脚本针对点图层的数据,先做缓冲区查询,然后在查询结果中找出与圆心直线距离最短的要素import arcgisscripting, sys, os, math#calculate distance between centerPoint and points in feature layer #define input parameters: featureLyr(buffer select result), #centerPoint(feature set) gp = arcgisscripting.create(9.3) featureLyr = gp.GetParameter(0) featureSet = gp.GetParameter(1) closestLyr = gp.GetParameterAsText(2) # Create the output feature class gp.toolbox = &management& gp.CreateFeatureClass(os.path.dirname(closestLyr),os.path.basename(closestLyr),&Point&) # Create search cursor rows = gp.SearchCursor(featureSet) row = rows.Next() #get the point geometry centerPoint = row.shape.GetPart()rows2 = gp.SearchCursor(featureLyr) row2 = rows2.Next() pt = row2.shape.GetPart() length = math.sqrt(math.pow(pt.x-centerPoint.x,2) + math.pow(pt.y-centerPoint.y,2)) shp = row2.shapewhile row2: pt = row2.shape.GetPart() tempLen = math.sqrt(math.pow(pt.x-centerPoint.x,2) + math.pow(pt.y-centerPoint.y,2)) if(tempLen & length): length = tempLen shp = row2.shape #gp.AddMessage(&pt.x=& + str(pt.x) + &, pt.y=& + str(pt.y)) row2 = rows2.Next()pnt = shp.GetPart()closestCur = gp.InsertCursor(closestLyr) feat = closestCur.NewRow() feat.shape = shp closestCur.InsertRow(feat)Python 中的文件管理一、Python 中的文件管理 文件管理是很多应用程序的基本功能和重要组成部分。 Python 可以使文件管理极 文件管理是很多应用程序的基本功能和重要组成部分。 其简单,特别是和其它语言相对比。 其简单,特别是和其它语言相对比。 以下, 讲解了文件管理基础。 以下,Peyton McCullough 讲解了文件管理基础。 介绍 你玩过的游戏使用文件来保存存档;你下的订单保存在文件中;很明显, 你玩过的游戏使用文件来保存存档;你下的订单保存在文件中;很明显,你早上 写的报告也保存在文件中。 写的报告也保存在文件中。 几乎以任何语言编写的众多应用程序中,文件管理是很重要的一部分。 几乎以任何语言编写的众多应用程序中,文件管理是很重要的一部分。Python 当 然也不例外。在这篇文章中,我们将探究如何使用一些模块来操作文件。 然也不例外。在这篇文章中,我们将探究如何使用一些模块来操作文件。我们会完成 读文件,写文件,增加文件内容的操作,还有一些另类的用法。 ,让我们开始吧。 读文件,写文件,增加文件内容的操作,还有一些另类的用法。OK,让我们开始吧。 读写文件 最基本的文件操作当然就是在文件中读写数据。这也是很容易掌握的。 最基本的文件操作当然就是在文件中读写数据。这也是很容易掌握的。现在打开 一个文件以进行写操作: 一个文件以进行写操作: fileHandle = open ( 'test.txt', 'w' ) fileHandle = open ( 'test.txt', 'w' )‘w'是指文件将被写入数据,语句的其它部分 是指文件将被写入数据, ‘ 是指文件将被写入数据 很好理解。下一步就是将数据写入文件: 很好理解。下一步就是将数据写入文件: fileHandle.write ( 'This is a test.\nReally, it is.' ) fileHandle.write ( 'This is a test.\nReally, it is.' )这个语句将“This is a test.” 这个语句将“ 这个语句将 ” 写入文件的第一行, 写入文件的第一行, Really, it is.”写入文件的第二行。最后,我们需要做清理工作, “ ”写入文件的第二行。最后,我们需要做清理工作, 并且关闭文件: 并且关闭文件: fileHandle.close() fileHandle.close()正如你所见, Python 的面向对象机制下, 正如你所见, 的面向对象机制下, 这确实非常简单。 正如你所见 在 这确实非常简单。 需要注意的是, 方式在文件中写数据, 所有原来的内容都会被删除。 需要注意的是, 当你再次使用 w” “ ” 方式在文件中写数据, 所有原来的内容都会被删除。 如果想保留原来的内容,可以使用“ ”方式在文件中结尾附加数据: 如果想保留原来的内容,可以使用“a”方式在文件中结尾附加数据: fileHandle = open ( 'test.txt', 'a' ) fileHandle.write ( '\n\nBottom line.' ) fileHandle.close() fileHandle = open ( 'test.txt', 'a' ) fileHandle.write ( '\n\nBottom line.' ) fileHandle.close()然后,我们读取 test.txt,并将内容显示出来: 然后, 然后 ,并将内容显示出来: fileHandle = open ( 'test.txt' ) print fileHandle.read() fileHandle.close() fileHandle = open ( 'test.txt' ) print fileHandle.read() fileHandle.close()以上语句将读取整个文件并显示其中的数据。我们也可以读取 以上语句将读取整个文件并显示其中的数据。 以上语句将读取整个文件并显示其中的数据 文件中的一行: 文件中的一行: fileHandle = open ( 'test.txt' ) print fileHandle.readline() # &This is a test.& fileHandle.close() fileHandle = open ( 'test.txt' ) print fileHandle.readline() # &This is a test.& fileHandle.close() 同时, 同时,也可以将文件内容保存到一个 list 中: fileHandle = open ( 'test.txt' ) fileList = fileHandle.readlines()&DIV&&/DIV& for fileLine in fileList: print '&&', fileLine fileHandle.close() fileHandle = open ( 'test.txt' ) fileList = fileHandle.readlines()for fileLine in fileList: print '&&', fileLine fileHandle.close()Python 在读取一个文件时, 在读取一个文件时, 会记住其在文件中的位置, 会记住其在文件中的位置, 如下所 示: fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.readline() # &Really, it is.&fileHandle.close() fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.readline() # &Really, it is.&fileHandle.close()可以看到,只有第二行 可以看到, 可以看到 显示出来。然而, 从头开始读来解决这个问题: 显示出来。然而,我们可以让 Python 从头开始读来解决这个问题: fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.seek ( 0 ) print fileHandle.readline() # &This is a test.& fileHandle.close() fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.seek ( 0 ) print fileHandle.readline() # &This is a test.& fileHandle.close()在上面这个例子中,我们让 Python 从文件第一个字节开始读 在上面这个例子中, 在上面这个例子中 取数据。所以,第一行文字显示了出来。当然, 取数据。所以,第一行文字显示了出来。当然,我们也可以获取 Python 在文件中的位 置: fileHandle = open ( 'test.txt' ) print fileHandle.readline() # &This is a test.& print fileHandle.tell() # &17& print fileHandle.readline() # &Really, it is.& fileHandle = open ( 'test.txt' ) print fileHandle.readline() # &This is a test.& print fileHandle.tell() # &17& print fileHandle.readline() # &Really, it is.&或者在文件中一次读取几个字节的内 或者在文件中一次读取几个字节的内 容: fileHandle = open ( 'test.txt' ) print fileHandle.read ( 1 ) # &T& fileHandle.seek ( 4 ) print FileHandle.read ( 1 ) # & &(原文有错 原文有错) 原文有错 fileHandle = open ( 'test.txt' ) print fileHandle.read ( 1 ) # &T& fileHandle.seek ( 4 ) print FileHandle.read ( 1 ) # & &(原文有错 在 Windows 和 Macintosh 环境下, 原文有错)在 环境下, 原文有错 时可能需要以二进制方式读写文件,比如图片和可执行文件。此时, 有时可能需要以二进制方式读写文件,比如图片和可执行文件。此时,只要在打开文 件的方式参数中增加一个“ ”即可: 件的方式参数中增加一个“b”即可: fileHandle = open ( 'testBinary.txt', 'wb' ) fileHandle.write ( 'There is no spoon.' ) fileHandle.close() fileHandle = open ( 'testBinary.txt', 'wb' ) fileHandle.write ( 'There is no spoon.' ) fileHandle.close() fileHandle = open ( 'testBinary.txt', 'rb' ) print fileHandle.read() fileHandle.close() fileHandle = open ( 'testBinary.txt', 'rb' ) print fileHandle.read() fileHandle.close()二、从现有文件中获取信息 二 中的模块,可以从现有文件中获取信息。使用“ ”模块和“ 使用 Python 中的模块,可以从现有文件中获取信息。使用“os”模块和“stat” ” 模块可以获取文件的基本信息: 模块可以获取文件的基本信息: import os import stat import time&DIV&&/DIV& fileStats = os.stat ( 'test.txt' ) fileInfo = { 'Size' : fileStats [ stat.ST_SIZE ], 'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ), 'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ), 'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ), 'Mode' : fileStats [ stat.ST_MODE ] } for infoField, infoValue in fileInfo: print infoField, ':' + infoValue if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory. ' else: print 'Non-directory.' import os import stat import timefileStats = os.stat ( 'test.txt' ) fileInfo = { 'Size' : fileStats [ stat.ST_SIZE ], 'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ), 'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ), 'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ), 'Mode' : fileStats [ stat.ST_MODE ] } for infoField, infoValue in fileInfo: print infoField, ':' + infoValue if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory. ' else: print 'Non-directory.' 上 面 这 个 例 子 创 建 了 一 个 包 含 文 件 基 本 信 息 的 dictionary。然后显示了相关信息,并且告诉我们打开的是否为目录。我们也可以试一 。然后显示了相关信息,并且告诉我们打开的是否为目录。 下打开的是否是其它几种类型 其它几种类型: 下打开的是否是其它几种类型: import os import stat fileStats = os.stat ( 'test.txt' ) fileMode = fileStats [ stat.ST_MODE ] if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ): print 'Regular file.' elif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory.' elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ): print 'Shortcut.' elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ): print 'Socket.' elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ): print 'Named pipe.' elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ): print 'Block special device.' elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ): print 'Character special device.' import os import stat fileStats = os.stat ( 'test.txt' ) fileMode = fileStats [ stat.ST_MODE ] if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ): print 'Regular file.' elif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory.' elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ): print 'Shortcut.' elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ): print 'Socket.' elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ): print 'Named pipe.' elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ): print 'Block special device.' elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ): print 'Character special device.'另外,我们可以使用“os.path”来获取基 另外, 另外 我们可以使用“ ” 本信息: 本信息: import os.path fileStats = 'test.txt' if os.path.isdir ( fileStats ): print 'Directory.' elif os.path.isfile ( fileStats ): print 'File.' elif os.path.islink ( fileStats ): print 'Shortcut.' elif os.path.ismount ( fileStats ): print 'Mount point.' import os.path fileStats = 'test.txt' if os.path.isdir ( fileStats ): print 'Directory.' elif os.path.isfile ( fileStats ): print 'File.' elif os.path.islink ( fileStats ): print 'Shortcut.' elif os.path.ismount ( fileStats ): print 'Mount point.'三、目录 三 和普通文件一样,关于目录的操作也很容易掌握。首先,列出一个目录的内容: 和普通文件一样,关于目录的操作也很容易掌握。首先,列出一个目录的内容: import os for fileName in os.listdir ( '/' ): print fileName import os for fileName in os.listdir ( '/' ): print fileName 正如你所见,这很简单,用三行代码就可以完成。 正如你所见,这很简单,用三行代码就可以完成。 创建目录也很简单: 创建目录也很简单: import os os.mkdir ( 'testDirectory' ) import os os.mkdir ( 'testDirectory' )删除刚才创建的目录: 删除刚才创建的目录 删除刚才创建的目录: import os os.rmdir ( 'testDirectory ) import os os.rmdir ( 'testDirectory )嗯,可以创建多级目录: 嗯 可以创建多级目录: import os os.makedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' ) import os os.makedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' )如果没有在创 如果没有在创 建的文件夹中添加任何东西,就可以一次性将它们全部删除( 建的文件夹中添加任何东西,就可以一次性将它们全部删除(即,删除所列的所有空 文件夹) 文件夹) : import os os.removedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' ) import os os.removedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' )当需要对一 当需要对一 个特定的文件类型进行操作时,我们可以选择“ 个特定的文件类型进行操作时,我们可以选择“fnmatch”模块。以下是显示“.txt” ”模块。以下是显示“ ” 文件的内容和“ 文件的内容和“.exe”文件的文件名: ”文件的文件名: import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmath ( fileName, '*.txt' ): print open ( fileName ).read() elif fnmatch.fnmatch ( fileName, '*.exe' ): print fileName import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmath ( fileName, '*.txt' ): print open ( fileName ).read() elif fnmatch.fnmatch ( fileName, '*.exe' ): print fileName“*”字符可以表示任意长度的字符。如果要匹配一个字 “ ”字符可以表示任意长度的字符。 则使用“ ”符号: 符,则使用“?”符号: import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmatch ( fileName, '?.txt' ): print 'Text file.' import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmatch ( fileName, '?.txt' ): print 'Text file.'“fnmatch”模块支持正则表达式: “ ”模块支持正则表达式: import fnmatch import os import re filePattern = fnmatch.translate ( '*.txt' ) for fileName in os.listdir ( '/' ): if re.match ( filePattern, fileName ): print 'Text file.' import fnmatch import os import re filePattern = fnmatch.translate ( '*.txt' ) for fileName in os.listdir ( '/' ): if re.match ( filePattern, fileName ): print 'Text file.'若只需要匹配一种类型的文件, 若只需要匹配一种类型的文件, 若只需要匹配一种类型的文件 更好的办法是使用 glob” “ ” 模块。该模块的格式和“ 模块。该模块的格式和“fnmatch”相似: ”相似: import glob for fileName in glob.glob ( '*.txt' ): print 'Text file.' import glob for fileName in glob.glob ( '*.txt' ): print 'Text file.'使用一定范围的字符来匹配同样可行,就像在正则表达式中 使用一定范围的字符来匹配同样可行, 使用一定范围的字符来匹配同样可行 使用一样。假设你想要显示扩展名前只有一位数字的文件的文件名: 使用一样。假设你想要显示扩展名前只有一位数字的文件的文件名: import glob for fileName in glob.glob ( '[0-9].txt' ): print filename import glob for fileName in glob.glob ( '[0-9].txt' ): print filename“glob”模块利用“fnmatch”模块来实现。 “ ” 块利用“ ”模块来实现。 四、数据编组 使用前一节中介绍的模块,可以实现在文件中对字符串的读写。 使用前一节中介绍的模块,可以实现在文件中对字符串的读写。 然而,有的时候,你可能需要传递其它类型的数据, 然而,有的时候,你可能需要传递其它类型的数据,如 list、tuple、dictionary 、 、 和其它对象。 来完成。 和其它对象。在 Python 中,你可以使用 Pickling 来完成。你可以使用 Python 标准 库中的“ 库中的“pickle”模块完成数据编组。 ”模块完成数据编组。 下面, 下面,我们来编组一个包含字符串和数字的 list: : import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 'This', 2, 'is', 1, 'a', 0, 'test.' ] pickle.dump ( testList, fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 'This', 2, 'is', 1, 'a', 0, 'test.' ] pickle.dump ( testList, fileHandle ) fileHandle.close()拆分编组同样不难: 拆分编组同样不难: 拆分编组同样不难 import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.close()现在试试存储更加复杂的数据: 现在试试存储更加复杂的数据: 现在试试存储更加复杂的数据 : import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 123, { 'Calories' : 190 }, 'Mr. Anderson', [ 1, 2, 7 ] ] pickle.dump ( testList, fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 123, { 'Calories' : 190 }, 'Mr. Anderson', [ 1, 2, 7 ] ] pickle.dump ( testList, fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.close() 如上所述, 编组确实很简单。 如上所述,使用 Python 的“pickle”模块编组确实很简单。众多对象可以通过它 ”模块编组确实很简单 来存储到文件中。如果可以的话, 来存储到文件中。如果可以的话, cPickle”同样胜任这个工作。它和“pickle”模块 “ ”同样胜任这个工作。它和“ ” 一样,但是速度更快: 一样,但是速度更快: import cPickle fileHandle = open ( 'pickleFile.txt', 'w' ) cPickle.dump ( 1776, fileHandle ) fileHandle.close() import cPickle fileHandle = open ( 'pickleFile.txt', 'w' ) cPickle.dump ( 1776, fileHandle ) fileHandle.close()五、创建“虚拟”文件 五 创建“虚拟” 你用到的许多模块包含需要文件对象作为参数的方法。但是, 你用到的许多模块包含需要文件对象作为参数的方法。但是,有时创建并使用一 个真实的文件并让人感到有些麻烦。 所幸的是, 个真实的文件并让人感到有些麻烦。 所幸的是, Python 中, 在 你可以使用 StringIO” “ ” 模块来创建文件并将其保存在内存中: 模块来创建文件并将其保存在内存中: import StringIO fileHandle = StringIO.StringIO ( &Let freedom ring& ) print fileHandle.read() # &Let freedom ring.& fileHandle.close() import StringIO fileHandle = StringIO.StringIO ( &Let freedom ring& ) print fileHandle.read() # &Let freedom ring.& fileHandle.close()cStringIO” 模块同样有效。 一样, ” 模块同样有效。 它的使用方法和 StringIO” “ ” 一样, 就像“ 但就像“cPickle”之于“pickle” 它速度更快: ”之于“ ” 它速度更快: , import cStringIO fileHandle = cStringIO.cStringIO ( &To Kill a Mockingbird& ) print fileHandle.read() # &To Kill a Mockingbid& fileHandle.close() import cStringIO fileHandle = cStringIO.cStringIO ( &To Kill a Mockingbird& ) print fileHandle.read() # &To Kill a Mockingbid& fileHandle.close()结论 结论 文件管理,是众多编程语言的程序员在编写应用程序是经常遇到的问题。幸好, 文件管理,是众多编程语言的程序员在编写应用程序是经常遇到的问题。幸好, 和其它语言相比, 使其出乎意料地容易。 和其它语言相比,Python 使其出乎意料地容易。Python 的标准库中提供了许多相关 的模块帮助程序员解决这方面的问题,而它的面向对象的机制也简化了操作。 的模块帮助程序员解决这方面的问题,而它的面向对象的机制也简化了操作。 好了, 中文件管理的基本知识, 好了, 现在你已经了解了 Python 中文件管理的基本知识, 可以在今后的应用程序中很 好地使用了。 好地使用了。进行字段计算(1) 使用 Python 进行字段计算字段计算时,通常会遇到的工作是将两个或者多个字段值合并成一个字段。这类情型最典型的应用就是街 道要素。在街道要素中,分别有不同的字段来代表街道的前缀,街道名称以及街道类别,而你的工作就是 将这三个字段合并成一个字段。就如下面的例子所显示的那样,FULL_NAME 就是由 PREFIX,STREETNAME 以及 FTYPE 三个字段构成的。要完成这个字段计算,你需要使用 Calculate Field 工具,正如下面所示。 计算结果必须存放在文本类型的字段中。如图: 表达式是: !PREFIX! + ' ' + !STREETNAME! + ' ' 它代表将 PREFIX 字段的值加了一个空格然后再和 STREETNAME 字段连接,然 后再添加一个空格, 最后再添加 FTYPE。 叹号包含字段名表示使用这个字段的值。 表达式对输入的 Feature Class 的每一个值都进行计算,如果输入的 FeatureClass 有选中要素,那么只有选中要素的值会被更新。你可以直接将表 达式敲入 Expression 文本框中或者点击 Calculator 按钮, 然后在这里来构建你 的表达式。 在这里将 Expression Type 设为 PYTHON_9.3 是因为这样可以向下兼容。当 然,在 10 的平台上,直接选 PYTHON 计算也是 OK 的。关于 10 版本的 PYTHON 和 PYTHON_9.3 只有一些微小的差别。 如果上面的例子太简单了,那么再来一个例子。稍微复杂一些,但是也很常 见。下面的表显示的是一个 Overlay 的结果,它是将 Vegetation 和 Soil 要素类 通过 Intersect 工具计算出来的。Veg_Soil 是两者的联合,但是需要做一些处 理。进行字段计算(2) 使用 Python 进行字段计算(1)VEGTYPE 字段值中字首的空格需要移除,例如(”Englemann& 变成 &Englemann&)(2)VEGTYPE 中第一个字母大写,例如(&Whitebark pine& 变成 &Whitebark Pine&)(3)将 VEGTYPE 中空格移除,例如(&Whitebark Pine&变成&WhitebarkPine&)(4) VEGTYPE 与 SoilClass 之间的连接采用下划线下面是这个计算的 Calculate Field 的界面。在这里,表达式用的是一个 Python 的函数: concat_veg_and_soil(!VEGTYPE!,!SoilClass!),而这个函数定义在 Code Block(代码块)中,代码如下:def concat_veg_and_soil(veg,soil) #First strip off any leading/training spaces veg = veg.strip() #Remove hyphens(&Non-forest& to &Nonforest&) veg = veg.replace('-','') #Make initial caps,首字大写 veg = veg.title() #Remove space(&Lodgepole Pipe& to &LodgepolePipe&) veg = veg.replace(' ','') #Special case for null soiltype if soil=='': return veg else: return veg+'_'+soilPython 语言有非常严格的缩进规范(可以选用 IDLE 或者 PythonWin 来编这个代码段)。:代表一 个逻辑代码块的开始,然后这个代码块就在同一缩进的水平上。代码块中的函数必须有一个返回值,甚至 这个值是空值,也得返回。 这里介绍几个常用的 Python 字符串操作函数,当然,更详细的是在 (http://docs.python.org/release/2.6.5/library/string.html)sVal=”Hello world” sVal=sVal.strip() sVal = sVal.lstrip() sVal = sVal.rstrip() Strip 是移除开头和结尾的空格; Lstrip 移除左边的空格 Rstrip 移除右边的空格 你可以指定移除特定的字符,例如 lstrip(‘$’) sVal = sVal.title() sVal = sVal.upper() sVal = sVal.lower() sVal = sVal.replace(&old&,&new&)将每一个分隔的单词首字大写 将整个字符串转成大写或者小写格式将所有出现的&old&字符串替换成&New&。 sVal.replace(‘orld’,’all’)的结果 是”Hello walls”sVal = str(5.8299) sVal = str(int(5.8299)) sVal = sVal[begin:end]用字符值返回所代表的值 返回一个整型实数。返回值字符值 5 Begin 和 End 实际上是 String 上字符的 Index。返回的是 Begin 和 End 之间的值, 例如 sVal[0:5]返回的是”Hello”进行字段计算(3) 使用 Python 进行字段计算关于空值的处理 含有空值&Null&,在字段计算的时候会引发错误。当使用字段计算表达式计算时,它会查询 所有的&Null&值,而且一旦被它找到一个 Null 值,那么它就不计算了。这样是为了避免除 0 的操作以及其它没有定义的操作。 如你发现你的字段中存在 null 值,那么首先应该将其转换成字符串,用的是 str(),即便它 原来就是字符类型的字段。所以在 Expression 中最好写成: Concat_veg_and_soil(str(!VEGTYPE!),!SoilClass!) 一个通用的 Python 字段联合函数,非常通用。它的功能就是将所有的字段联合在一起。 函数如下: # &*args& allows this routine to accept any number of field values. # the values are passed as a Python tuple, essentially a # non-editable list # def concat(*args):# Initialize the return value to an empty string, # then set the separator character # retval = && sep = &_&# For each value passed in... # for t in args:# Convert to a string (this catches any numbers), # then remove leading and trailing blanks # s = str(t).strip()# Add the field value to the return value, using the separator # defined above # if s && '': retval += sep + s# Strip of any leading separators before returning the value # return retval.lstrip(sep)给 指 定 目 录 下 的 栅 格 数 据 批 量 赋 Spatial Reference# --------------------------------------------------------------------------# define sr.py # Created on: 周六 三月 06 :20 上午 # (generated by ArcGIS/ModelBuilder) # Usage: define sr &Input_Dataset_or_Feature_Class& &Coordinate_System& # --------------------------------------------------------------------------# Import system modules import sys, string, os, arcgisscripting # Create the Geoprocessor object gp = arcgisscripting.create(9.3) # Load required toolboxes... gp.AddToolbox(&C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx&) # Script arguments... Input_Raster_Folder = gp.GetParameterAsText(0) Coordinate_System = gp.GetParameterAsText(1) # Process: Define Projection... gp.Workspace = Input_Raster_Folder tiffs =gp.ListRasters(&*&,&TIF&) for tiff in tiffs: try: #gp.defineprojection(tiff, Coordinate_System) gp.DefineProjection_management(tiff, Coordinate_System) gp.addwarning(&Define raster dataset & + tiff + & spatial reference succeed!&) except: gp.addwarning(gp.getmessage(2)) 批量裁切指定目录下的影像数据# ---------------------------------------------------------------------------# Created on: 周六 三月 06 :20 上午#(generated by ArcGIS/ModelBuilder)# Usage: Batch extract rasters# ---------------------------------------------------------------------------# Import system modulesimport sys, string, os, arcgisscripting# Create the Geoprocessor objectgp = arcgisscripting.create(9.3)# Check out any necessary licensesgp.CheckOutExtension(&spatial&)# Load required toolboxes...gp.AddToolbox(&C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Spatial Analyst Tools.t bx&)# Script arguments...Input_Raster_Folder = gp.GetParameterAsText(0)Boundary_Mask_Feature_Class = gp.GetParameterAsText(1)Output_Raster_Folder = gp.GetParameterAsText(2)# Process: extract rasters...gp.Workspace = Input_Raster_Folder tiffs =gp.ListRasters(&*&,&TIF&)for tiff in tiffs:try:Output_raster = Output_Raster_Folder + &/& + tiffgp.ExtractByMask_sa(tiff, Boundary_Mask_Feature_Class, Output_raster)gp.addwarning(&Extraction of raster dataset & + tiff + & succeeded!&)except:gp.addwarning(gp.getmessage(2))Python 分隔字符串在用 ArcMap 制图时,某些标注过长,地图显示上不太好看,而 Maplex 扩展可以将标 注分行显示,但是首先要将标注字符串用符号分隔。下面的代码是用 Python 根据一定的规 则分隔字符串。 这个规则最好的情况下是要有个语义字典库, 这样才能保证字符串分割比较 符合语言习惯。 #coding=gbk import sys, string, os, arcgisscripting gp = arcgisscripting.create() def subString(str, fromindex, toindex): return str.decode('gbk')[fromindex:toindex].encode('gbk') #pfeatureclass = &D://Data//ChinaAdmin//entern.shp& #srcfield = &shanghai_4& #destfield = &Form_Name& pfeatureclass = gp.getparameterastext(0) srcfield = gp.getparameterastext(1) destfield = gp.getparameterastext(2) featurecur = gp.updatecursor(pfeatureclass, &&) featurerow = featurecur.next() while featurerow: name_cn = featurerow.getvalue(srcfield) #print name_cn unicodenamelen = len(name_cn.decode('gbk')) asciinamelen = len(name_cn) #如果字符串中含有非中文,不处理 if unicodenamelen * 2 != asciinamelen: result = name_cn else: if unicodenamelen == 6: result = subString(name_cn, 0, 3) + &|& + subString(name_cn, 3, 6) elif unicodenamelen == 7: result = subString(name_cn, 0, 4) + &|& + subString(name_cn, 4, 7) elif unicodenamelen == 8: result = subString(name_cn, 0, 4) + &|& + subString(name_cn, 4, 8) elif unicodenamelen == 9: result = subString(name_cn, 0, 5) + &|& + subString(name_cn, 5, 9) elif unicodenamelen == 10: result = subString(name_cn, 0, 5) + &|& + subString(name_cn, 5, 10) elif unicodenamelen == 11: result = subString(name_cn, 0, 6) + &|& + subString(name_cn, 6, 11) elif unicodenamelen == 12: result = subString(name_cn, 0, 6) + &|& + subString(name_cn, 6, 12) elif unicodenamelen == 13: result = subString(name_cn, 0, 5) + &|& + subString(name_cn, 5, 10) subString(name_cn, 10, 13) elif unicodenamelen == 14: result = subString(name_cn, 0, 5) + &|& + subString(name_cn, 5, 10) subString(name_cn, 10, 14) elif unicodenamelen == 15: result = subString(name_cn, 0, 5) + &|& + subString(name_cn, 5, 10) subString(name_cn, 10, 15) elif unicodenamelen == 16: result = subString(name_cn, 0, 6) + &|& + subString(name_cn, 6, 11) subString(name_cn, 11, 16) elif unicodenamelen == 17: result = subString(name_cn, 0, 6) + &|& + subString(name_cn, 6, 12) subString(name_cn, 12, 17) elif unicodenamelen == 18: result = subString(name_cn, 0, 6) + &|& + subString(name_cn, 6, 12) subString(name_cn, 12, 18) else: result = name_cn featurerow.setvalue(destfield, result) featurecur.Updaterow(featurerow) gp.addwarning(&Update feature row value & + result + & succeeded&) featurerow = featurecur.next(); del featurecur+ &|& ++ &|& ++ &|& ++ &|& ++ &|& ++ &|& + del featurerowpython 写的将 Coverage 转 e00# -*- coding: cp936 -*import arcgisscripting def Coverage2E00(workspacePath): gp = arcgisscripting.create() gp.workspace = workspacePath gp.toolbox = &arc& datasets = gp.listdatasets(&&,&coverage&) dataset = datasets.next() while dataset: print dataset gp.export(&COVER&, dataset, dataset+&.e00&, &NONE&, 1) dataset = datasets.next() if __name__ == &__main__&: #workspacePath 是 Coverage 目录的上一级目录,一个 workspacePath 目录下面可以 偷很多个 Coverage #该程序只能转 workspacePath 目录下的所有 Coverage,存放的时候最好把所有 Coverage 放在同一个 workspacePath 中 #转换后的 e00 文件存放在 workspacePath 下面,名字和 Coverage 名称相同 #该脚本使用需要安装 arcinfo/workstation,否则会提示 找不到 export 工具 #使用时请注意修改 workspacePath 路径 workspacePath = &e:\\e00& Coverage2E00(workspacePath) 用 python 写的一个生成 e00-&cov 批处理文件的小程序arcgis 本身支持生成批处理文件,但需要一个一个的点对话框,要么就自己手工粘贴, 如果 e00 文件有很多的话就很麻烦,所以写了这个小程序,顺便学习一下 pythonimport os #遍历目录,将该目录下面的所有 e00 文件遍历出来并根据这些文件路径生成一个批处 理文件(*.bat)def TraverseDir(file,e00Path ,covPath):mList = os.listdir(e00Path)for mPath in mList:tPath = e00Path+'\\'+mPathif os.path.isfile(tPath):if tPath[-4:]==&.e00&:str = &import71 &str = str +tPath+& &+covPath+& /T&file.write(str)file.write(&\n&)else :TraverseDir(file,tPath,covPath)if __name__ == &__main__&: # e00 文件目录,支持递归遍历e00Path =&e:\\e00& #需要转出的 cov 存放目录covPath = &e:\\cov& #生成的批处理文件路径,生成该批处理文件后,将其拷贝到 arcgis 的 bin 目录下面 执行就可以批量转换了 batName = &c:\\111.bat& file = open(batName,&w&) file.write(&REM batch e00-&cov\n&) TraverseDir(file,e00Path,covPath) file.close() print &OK&使用 arcpy 获取简单的矢量数据信息以往在使用 ArcEngine 获取一些要素类的信息时会显得比较麻烦, 要安装一系列的 IDE 才能运行。 现 在 arcpy 提供了很多方便的方式,让我们简单的获取这些信息。import arcpy from arcpy import env env.workspace=r&E:\services\行政图\行政区划图 mdb.mdb&cur=arcpy.SearchCursor(&地级市&)for row in cur: aa=row.getValue(&name&) print geo.crosses(geo) print geo.pointCount geo=row.shape print geo.type print str(geo.area)+&平方米& X= geo.extent.XMax x= geo.extent.XMin Y= geo.extent.YMax y= geo.extent.YMin print &Feature Extent XMax:%f,XMin:%f,YMax:%f,YMin:%f\nname = %s&%(X,x,Y,y,aa)这一段简单代码可以获得要素的很多信息,运行结果如下:False 4862 polygon .0 平方米 Feature Extent XMax:700,XMin:400,YMax:400,YMin:20 0 name = 通化市使用 arcpy 进行简单的要素编辑类似上篇博客内容,这次直接对要素属性内容考试编辑import arcpy from arcpy import env env.workspace=r&C:\Users\yao\Documents\ArcGIS\Default.gdb& print &修改之前:& Cur=arcpy.SearchCursor(&地级市&,'回族&0.5')for row in Cur: aa = row.getValue(&name&) bb = str(row.getValue(&回族&)) print &%s,population:%s&%(aa,bb) print &修改之后:& Cur=arcpy.UpdateCursor(&地级市&,'回族&0.5')for row in Cur: row.setNull(&回族&) Cur.updateRow aa = row.getValue(&name&) bb = str(row.getValue(&回族&)) print &%s,population:%s&%(aa,bb)结果如下:修改之前: 白山市,population:0. 延边州,population:0. 辽源市,population:0. 白城市,population:0. 修改之后: 白山市,population:None 延边州,population:None 辽源市,population:None 白城市,population:None用 arcpy 批量输出图片导图的版本有两个,将程序部分复制粘贴到文本文件中,将后缀改成&.py&, 其他参见各自说明: ################################################################# ######################### #作者:mtl #用途:将一个文件夹中的所有 mxd 文件(不包括子目录)导出成 jpg 图片, 并放置到该文件夹中。 #用法:用记事本打开,将参数 path 更改成指定的文件路径,注意将反斜杠 “\”改成正斜杠“/”;res 是设定的 dpi 值。 #运行方法: 打开 Python2.6 中的 IDLE, File - & Open -& run -& run Module。 ################################################################# ######################### import arcpy, os, time path = r'D:/workspace' res = 100 print '程序开始:' + str(time.ctime()) for afile in os.listdir(path): if afile[-3:].lower() == 'mxd': mxd = arcpy.mapping.MapDocument(os.path.join(path,afile)) arcpy.mapping.ExportToJPEG(mxd, os.path.join(path,afile[:-3] + 'jpg'), resolution = res) del mxd print '程序结束:' + str(time.ctime())################################################################# ######################### #作者:mtl #用途:将一个文件夹中的所有 mxd 文件(包括所有子目录中的 mxd 文件)导 出成 jpg 图片,并存储到该文件夹下。 #用法:用记事本打开,将参数 path 更改成指定的文件路径,注意将反斜杠 “\”改成正斜杠“/”;res 是设定的 dpi 值。 #运行方法: 打开 Python2.6 中的 IDLE, File - &Open -& run -& run Module。 ################################################################# ######################### import arcpy, os, time path = r'D:/workspace' res = 200 print '程序开始:' + str(time.ctime()) for root, dirs, files in os.walk(path): for afile in files: if afile[-4:].lower() == '.mxd': mxd = arcpy.mapping.MapDocument(os.path.join(root,afile)) arcpy.mapping.ExportToJPEG(mxd, os.path.join(path,afile[:-3] + 'jpg'), resolution = res) del mxd print '程序结束:' + str(time.ctime())————————————我是一条分割线 —————————————————————————— 说明: 1.对于方法二可以将 path 改成 root, 这样就可以将 jpg 文件放入每一个 mxd 对应的目录下面,而不是放到 path 制定的目录下面。 2.使用 filegeodatabase 比 personalgeodatabase 导出时会有效率上的提升, 以我的图按 dpi=10 来算有 10%的提升。 原来的时候分别写了两个脚本来用不同的方式来导出图片, 后来觉得合成一个为 好,于是就对原来的脚本做了一下修改。新功能是可以设定是否遍历子目录以导 出其中的 mxd 成 jpg 图片 (可以设定导出的 jpg 放到各自 mxd 相应的文件夹或最 顶级文件夹),还可以设定导出图后关机,这样我们就可以下班之后来让电脑来 处理这样乏味的工作了。 使用方法是将脚本放到文本文件中, 更改后缀为 py, IDLE 打开, 用 File - &Open -& run -& run Module。 --------------------------------------------------------------------------------------------------------------------------------------------#-*- coding: UTF-8 -*-################################################################# #Author:mtl #用途:将一个文件夹中的所有 mxd 文件(包括所有子目录中的 mxd 文件)导 出成 jpg 图片,并放到各自的目录下。 #用法:用记事本打开,将参数 path 更改成指定的文件路径,注意将反斜杠 “\”改成正斜杠“/”;res 是设定的 dpi 值。 #运行方法: 打开 Python2.6 中的 IDLE, File - &Open -& run -& run Module。 ################################################################# import arcpy, os, time#存放 mxd 文件的目录,也可以是存放 mxd 文件的上一级目录。 path = ur'C:\Documents and Settings\Administrator\桌面\导图' #导出 jpg 文件的分辨率。 res = 100 #mode1 可选值为 0 或 1, 表示导出 path 这个目录及其所有层次子目录中的 0 mxd,1 表示只导出 path 这个目录的 mxd 文件。 mode1 = 0 #mode2 可选值为 0 或 1, 表示 mxd 导出的图片放到与 mxd 相同的文件夹下, 0 1 表示放到 path 下面。 mode2 = 0 #mode3 可选值为 0 或 1,0 表示导图结束后不关机,1 表示结束后关机。 mode3 = 0def main(): for root, dirs, files in os.walk(path): if mode2 == 0: temp_path = root else: temp_path = path for afile in files: if afile[-4:].lower() == '.mxd': mxd = arcpy.mapping.MapDocument(os.path.join(root,afile)) arcpy.mapping.ExportToJPEG(mxd, os.path.join(temp_path,afile[:-3] + 'jpg'), resolution = res) del mxd print ur'succeed in exporting file ' + afile[:-3] + ur'jpg' if mode1 != 0: break if mode3 != 0: os.system('shutdown -s -t 120') if __name__ == &__main__&: main()
Python 教程:什么是 Python 摘要: Python 是一种编程语言,它的名字来源于一个喜剧。也许最初设计 Python 这种语言 的人并没有想到今天 Python 会在工业和科研上... Python3.x和Python2.x的区别_计算机软件及应用_IT/计算机_专业资料。Python3.x和Python2.x的区别编码语法使用2to3将代码移植到PYTHON 3 被重命名或者重新组织...python 的 try 语句有两种风格 一:种是处理异常(try/except/else) 二:种是无论是否发生异常都将执行最后的代码(try/finally) try/except/else 风格 try: &...比如, 完成同一个任务, C 语言要写 1000 行代码, Java 只需要写 100 行, 而 Python 可能只要 20 行。 所以 Python 是一种相当高级的语言。 你也许会问,...openstack 就是用 Python 编写的开源云计算平台 5.Python 与其他语言对比 类型 C Java Python 编译为机器码 编译为字节码 解释执行(不需要编 译) 运行速度 非常...Python 课程设计 课程设计——用类实现 ——用类实现 KFC 场景模拟
一、python 简介 Python 是一种面向对象、 直译式计算机程序设计语言,也是一种...else : … 7 python 不支持类似 c 的 for(i=0;i&5;i++)这样的循环语句,但可以借助 range 模拟: for x in range(0,5,2): print x 【数组相关】 ...Python 简介_计算机软件及应用_IT/计算机_专业资料。Python 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很... Python语言基础_英语学习_外语学习_教育专区。计算机编程Python 语言基础 Python 的数据类型变量的定义。在 python 中,变量的类型是由赋给它的数值定义的。 q=7 ...C与Python交互_军事/政治_人文社科_专业资料。C 语言与 Python 交互大夏天编辑整理于互联网,2017 Pyton 和 C 分别有着各自的优缺点,用 Python 开发程序速度快,...

我要回帖

更多关于 shp字段长度修改 的文章

 

随机推荐