我在使用 zipfile.Zipfile() 函数时遇到问题。它正确压缩我的文件,但在输出 zip 文件中包含我不想要的额外文件夹。它确实将我想要的所有文件放入 .zip 中,但默认情况下似乎添加了写入 .zip 文件中的文件的最后几个目录。有什么办法可以排除这些文件夹吗?这是我的代码:
import arcpy, os
from os import path as p
import zipfile
arcpy.overwriteOutput = True
def ZipShapes(path, out_path):
arcpy.env.workspace = path
shapes = arcpy.ListFeatureClasses()
# iterate through list of shapefiles
for shape in shapes:
name = p.splitext(shape)[0]
print name
zip_path = p.join(out_path, name + '.zip')
zip = zipfile.ZipFile(zip_path, 'w')
zip.write(p.join(path,shape))
for f in arcpy.ListFiles('%s*' %name):
if not f.endswith('.shp'):
zip.write(p.join(path,f))
print 'All files written to %s' %zip_path
zip.close()
if __name__ == '__main__':
path …Run Code Online (Sandbox Code Playgroud) 我想将arcpy用于Anaconda的Spyder.我有一个完整的ArcGIS许可证,所以这不是问题.我可以通过将arcpy文件夹从C:\ Program Files(x86)\ ArcGIS\Desktop10.1\arcpy复制到C:\ Anaconda\Lib\site-packages中来半导入模块,但是导入永远不会完成,因为我收到错误"ImportError:没有名为arcgisscripting的模块".有没有办法让arcpy在Spyder中工作?
我目前正在尝试为使用 ArcGIS arcpy 库的脚本生成 sphinx 文档。
当 sphinx 在生成文档时尝试运行脚本时,我遇到了一个问题,因为 arcpy 脚本从 arcgis gui 获取输入参数。由于 sphinx 在没有 gui 的情况下调用脚本,因此这些参数为空并导致回溯,例如:
C:\VersionControl\PythonScripts\Source\src\_build\script_export_pdf.rst:4: WARNING: autodoc: failed to import module u'gis.scripts.script_export_pdf'; the following exception was raised:
Traceback (most recent call last):
File "C:\VersionControl\PythonScripts\Source\src\lib\Python27\ArcGIS10.1\lib\site-packages\sphinx\ext\autodoc.py", line 335, in import_object
__import__(self.modname)
File "C:\VersionControl\PythonScripts\Source\src\gis\scripts\script_export_pdf.py", line 76, in <module>
mxd.ExportToPDF(in_mxds, out_folder, overwrite, current)
File "C:\VersionControl\PythonScripts\Source\src\gis\mapping\mxd.py", line 315, in ExportToPDF
_ExportToPDF(arcpy.mapping.MapDocument(m), out_folder, overwrite)
File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\mixins.py", line 609, in __init__
assert (os.path.isfile(mxd) or (mxd.lower() == "current")), gp.getIDMessage(89004, "Invalid MXD filename") …Run Code Online (Sandbox Code Playgroud) 我试图计算'kurtosis',以及来自numpy数组的其他统计数据.正如我刚才所做的那样,计算Min,Max,Mean和Standard Deviation很容易.
import arcpy
arr = arcpy.RasterToNumPyArray(input_Raster)
x = arr
print 'Min =', x.min()
print 'Max =', x.max()
print 'Mean =', x.mean()
print 'Standard Deviation =', x.std()
Run Code Online (Sandbox Code Playgroud)
哪个输出:
Min = 1.87895
Max = 16.8343
Mean = 8.03462
Standard Deviation = 1.52192
Run Code Online (Sandbox Code Playgroud)
但这种方法不适用于Kurtosis!正如我试过的那样
print 'Kurtosis =', x.kurtosis()
Run Code Online (Sandbox Code Playgroud)
我得到:AttributeError:'numpy.ndarray'对象没有属性'kurtosis'
什么是最简单的代码,我可以用它来计算自己的峰度结果?谢谢.
我已经通过将导入移到顶部声明来解决我的问题,但它让我想知道:为什么我不能使用'__main__'在作为目标的函数中导入的模块multiprocessing?
例如:
import os
import multiprocessing as mp
def run(in_file, out_dir, out_q):
arcpy.RaterToPolygon_conversion(in_file, out_dir, "NO_SIMPIFY", "Value")
status = str("Done with "+os.path.basename(in_file))
out_q.put(status, block=False)
if __name__ == '__main__':
raw_input("Program may hang, press Enter to import ArcPy...")
import arcpy
q = mp.Queue()
_file = path/to/file
_dir = path/to/dir
# There are actually lots of files in a loop to build
# processes but I just do one for context here
p = mp.Process(target=run, args=(_file, _dir, q))
p.start()
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试为某些数据设置 ARIMA 模型,为此,我在时间序列中使用了“autocorrelation_plot()”。然而它会产生标题中的错误。
我有一个属性表,其中包括日期和时间字段。我提取了它们(将属性表转换为 numpy 表后),将它们放入“datetime”变量中并将它们全部附加到列表中:
O,A = [],[]
dt = datetime.strptime(dt1, "%Y/%m/%d %H:%M")
A.append(dt)
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建时间序列并打印它们以确保结果:
data2 = pd.Series(A, O)
print data2
Run Code Online (Sandbox Code Playgroud)
结果令人满意,直到我决定自动关联:
自相关命令:
autocorrelation_plot(data2)
Run Code Online (Sandbox Code Playgroud)
执行此命令后,返回:
TypeError: ufunc add 无法使用类型为 dtype('M8[ns]') 和 dtype('M8[ns]') 的操作数
我猜这是由于 datetime.strptime 转换为 numpy 造成的?我尝试遵循之前问题 index.to_pydatetime()、 dtype、M8[ns] error ...的一些建议,但徒劳。
最小可重现示例:
from pandas import datetime
from pandas import DataFrame
import pandas as pd
from matplotlib import pyplot as plt
from pandas.tools.plotting import autocorrelation_plot
arr = arcpy.da.TableToNumPyArray(inTable ,("PROVINCE","ZONE_CODE","MEAN", "Datetime","Time"))
arr_length = len(arr)
j = 1
O,A = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python自动执行ArcGIS Desktop中的各种任务(通常使用ArcMap),并且我一直需要一种方法来将形状文件添加到当前地图.(然后做一些事情,但这是另一个故事).
到目前为止,我能做的最好的事情是使用以下方法将一个图层文件添加到当前地图("addLayer"是一个图层文件对象):
def AddLayerFromLayerFile(addLayer):
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd, df, addLayer
Run Code Online (Sandbox Code Playgroud)
但是,我的原始数据总是形状文件,所以我需要能够打开它们.(等效:将形状文件转换为图层文件,无需打开它,但我不想这样做).
使用arcpy,我的目的是在列表中存储要素类以供进一步处理.每行都是一个{'field name': value}包含几何图形的字典.
实现此任务的最pythonic方法应该是使用list comprehension:
fc = '/path/to/fc'
fields = [f.name for f in arcpy.ListFields(fc)] # get field list
features = [[row.getValue(f) for f in fields] for row in arcpy.SearchCursor(fc)]
Run Code Online (Sandbox Code Playgroud)
此方法适用于数据,但列表中的几何图形都相同(在fc中检索的最后几何图形).SearchCursor的这种行为已经在StackOverflow上发表了评论.
我尝试了另一种方法:
fc = '/path/to/fc'
shape_field = arcpy.Describe(fc).shapeFieldName
# load geometry in a list
geom = arcpy.Geometry()
feat = [{shape_field: f} for f in arcpy.CopyFeatures_management(fc, geom)] # slow
# load data in a list
fields = [f.name for f in arcpy.ListFields(fc)]
data = [dict([(f, …Run Code Online (Sandbox Code Playgroud) ogr2ogr或arcpy可以直接csv进行shapefile转换吗?我正在尝试用一个小脚本自动化一些进程,并希望我可以使用ogr2ogr或arcpy轻松完成,我是新手.
任何输入将不胜感激.
我试图自己解决问题,但我无法解决,我试图以您可以想象的每种格式运行此代码,并且在ArcGIS Pro软件中也是如此,在其他任何版本中都找不到此错误消息问题。从类似的问题来看,似乎有些数据文件可能丢失了?
import geopandas as gpd
import json
import numpy as np
from shapely.geometry import LineString, Point, box
import ast
from pyproj import Proj
Run Code Online (Sandbox Code Playgroud)
paths = road_features.SHAPE.map(lambda x: np.array(ast.literal_eval(x)["paths"][0]))
pathLineStrings = paths.map(LineString)
gdf = gpd.GeoDataFrame(road_features,geometry=pathLineStrings)
#gdf.crs = {'init': 'epsg:3857'}
gdf.crs = {'init': 'epsg:4326'}
Run Code Online (Sandbox Code Playgroud)
gdf = gdf.to_crs({'init': 'epsg:4326'})
Run Code Online (Sandbox Code Playgroud)
我得到这个错误
RuntimeError: b'no arguments in initialization list'
Run Code Online (Sandbox Code Playgroud)
我也在arcgis pro中尝试过
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\Lib\site-packages\geopandas\geodataframe.py", line 443, in to_crs
geom = df.geometry.to_crs(crs=crs, epsg=epsg)
File "C:\Program …Run Code Online (Sandbox Code Playgroud)