标签: arcpy

解决 sys.path 和 os.path.join 中的混合斜线问题

我需要解决 sys.path 提供的分隔符和 os.path.join 使用的分隔符之间的差异。

我模仿了这个 Esri 方法(共享 Python 脚本的技术)来使我的脚本可移植。它目前在 Windows 中使用,但最终将在 Linux 服务器上运行;我需要让 Python 确定适当的斜线。

他们的建议是:

# Get the pathname to this script
scriptPath = sys.path[0]

# Get the pathname to the ToolShare folder
toolSharePath = os.path.dirname(scriptPath)

# Now construct pathname to the ToolData folder
toolDataPath = os.path.join(toolSharePath, "ToolData")
print "ToolData folder: " + toolDataPath
Run Code Online (Sandbox Code Playgroud)

但是这个输出ToolData folder: C:/gis\ToolData——显然混合斜线是行不通的。

这个问题(在 windows 上混合斜线与 os.path.join)包括解决方案的基本方法:

在将其放入os.path.join. 通过这种方式,您可以确保os.path.join不会基于可能错误的输入做出错误的决定

但是,我不确定如何确保它可以跨平台工作。如果我.replace("/","\\")sys.path[0]结果上使用,这对 …

python portability sys arcpy

4
推荐指数
1
解决办法
7882
查看次数

如何在创建目录时显示消息?

我正在寻找输入以在创建目录时打印消息.我在混合操作系统环境中,但在我的情况下使用Win 7,python 2.7,ArcGIS 10.2.

下面的代码就功能而言工作正常,如果目录确实存在,屏幕上会出现消息,但是当os.makedirs实际创建非existant目录并且我想要代码时,我无法将消息返回到屏幕要做到这一点.

我使用过谷歌和Stackoverflow,遇到了许多处理os.makdir的例子,但没有发现任何可以解决我的问题,这个问题与检查Dir是否存在类似但不相同

    td = arcpy.env.workspace

    dn1 = "Test" dirmk = td +sep+ dn1

    try:
        os.makedirs(dirmk) except OSError:
        if os.path.exists(dirmk):
            print '\n' + dn1 + " dir already exists so keep on hustlin"
        else:
            print '\n' + "Creating " + dn1
Run Code Online (Sandbox Code Playgroud)

python arcgis python-2.7 arcpy os.path

4
推荐指数
1
解决办法
107
查看次数

Arcpy:字典语法错误"无法分配给函数调用"

我正在尝试使用以下代码找到"CrudeRate"及其关联的"State_name"的最大值:

import arcpy
arcpy.env.workspace = "C:\\"

shp = r"C:\\USCancer2000.dbf"
rows = arcpy.SearchCursor(shp)
CrudeRate= "CrudeRate"
State_name= "State_name"

out_dict = {}
for row in rows:
    for C in CrudeRate:
        lst = []
        if row.CrudeRate == C:
            lst.append(row.CrudeRate)
        out_dict(C) = max(lst)
del row,rows
for CrudeRate in out_dict:
    print CrudeRate, State_name
Run Code Online (Sandbox Code Playgroud)

但当我运行它时,我得到:

Sytnax错误:无法分配函数调用

有没有人看到问题以及如何解决它?

python arcpy

3
推荐指数
1
解决办法
2万
查看次数

从字符串文本中减去字符串文本

好的,再来一个。我有:

var1 = "tuna"
var2 = "tunasandwich"
Run Code Online (Sandbox Code Playgroud)

我想要:

var3 = "sandwich"
Run Code Online (Sandbox Code Playgroud)

我知道我的问题非常基本,但我问他们很简单,并寻找简单的答案,因为我对编程非常陌生。这里问的很多问题都在我的头上,所以如果其他像我这样的初学者搜索,他们会找到我简单的初学者问题和答案。

谢谢

python arcpy

3
推荐指数
1
解决办法
3008
查看次数

arcpy获取要素数据集中要素类的数据库路径

我正在尝试获取要素类的数据库路径,该要素类可能在要素数据集中,也可能不在要素数据集中.我正在使用os.path.dirname要素类.如果要素类不在要素数据集中(这很好),这将为我提供数据库路径,但如果要素类位于要素数据集中,它将为我提供要素数据集的路径.

这可以是文件,个人或sde地理数据库.我在考虑split使用'.sde',但如果它是一种不同类型的地理数据库则无法使用.

路径的示例可以是:

  • 对于要素数据集内部:C:\ GISData\Data.gdb\Property\Erf
  • 对于gdb根目录下:C:\ GISData\Data.gdb\Erf

在这两种情况下,我想得到C:\ GISData\Data.gdb.

谢谢.

python database path dataset arcpy

3
推荐指数
2
解决办法
5858
查看次数

不使用局部变量值 - python

我正在编写一些python代码(与ArcGIS结合使用),我有一个简单的语句运行良好,完全按照我的要求去做,我只是从我的脚本软件(PyCharm)得到一个"警告"我:

  • 不使用局部变量'row'值
  • 此检查突出显示范围中未使用的局部变量,参数或本地函数.

我知道它没有被使用,因为它不需要.这是唯一的方法(我个人知道)计算表中存在多少行.

有人能告诉我是否有更好的(更正确的)写作方式?

cursor = arcpy.SearchCursor(my_table)
for row in cursor:
    count += 1
print count
Run Code Online (Sandbox Code Playgroud)

干杯

python arcpy

2
推荐指数
1
解决办法
4665
查看次数

使用 ARCPY 读取形状文件的坐标

我在目录中有一个形状文件列表,我正在尝试使用arcpy.

有任何想法吗?谢谢。

python shapefile arcpy

1
推荐指数
1
解决办法
3880
查看次数

导入arcpy导致ImportError:无法导入名称shares_memory

我最近将我的ESRI ArcDesktop软件升级到10.5版,但是现在当我运行任何需要导入arcpy模块的python脚本时,我收到以下错误:

>>> import arcpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\ArcGIS\Desktop10.5\ArcPy\arcpy\__init__.py", line 20, i
n <module>
    import numpy
  File "c:\python27\ArcGIS10.5\lib\site-packages\numpy\__init__.py", line 142, in <mod
ule>
    from . import add_newdocs
  File "c:\python27\ArcGIS10.5\lib\site-packages\numpy\add_newdocs.py", line 13, in <m
odule>
    from numpy.lib import add_newdoc
  File "c:\python27\ArcGIS10.5\lib\site-packages\numpy\lib\__init__.py", line 8, in <m
odule>
    from .type_check import *
  File "c:\python27\ArcGIS10.5\lib\site-packages\numpy\lib\type_check.py", line 11, in
 <module>
    import numpy.core.numeric as _nx
  File "c:\python27\ArcGIS10.5\lib\site-packages\numpy\core\__init__.py", line 21, in
<module>
    from . …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib arcmap arcpy

1
推荐指数
1
解决办法
1401
查看次数

Arcpy 脚本以前快现在慢?

问题几乎概括了这一点。今天早些时候我在 PyCharm 中运行了以下脚本:

rasterfolder = "F:/1_Raster_Processing/Classified/"
vectorfolder = "H:/Output/SplitShapes/"
tablefolder = "H:/Output/Split_Tables_3/"


import arcview
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")


arcpy.env.workspace = vectorfolder
flist = arcpy.ListFeatureClasses()
for f in flist:
    TabulateArea(f,"FID",rasterfolder + "KNN100_" + f[:-6] + ".tif","Value",tablefolder + f[:-4] + ".dbf",0.25)
Run Code Online (Sandbox Code Playgroud)

一个要素类大约需要 4 分钟,并且有几百个要素类需要运行。在一天中间的某个时刻,该进程挂起并且不再生成任何输出,因此我终止了它并重新开始(认为这是 pyCharm 问题)。当我重新开始时,每个要素类突然需要大约 1 小时以上才能执行完全相同的过程。我已经在 WingIDE 中尝试了相同的过程,但仍然遇到问题。我已经重新启动了所有内容,并且除了这台机器上的这个进程之外什么都不运行。想法?我需要在这里牺牲一只牲口吗?winRar 需要付费吗?

其他人在运行脚本时是否遇到过问题?前几次运行得很好,但突然间,没有明显的原因,速度大幅减慢?

python ide arcpy

1
推荐指数
1
解决办法
1209
查看次数

用于 ArcGIS 更新坐标的更新光标命令,但坐标位置未更新?

我正在编写一个脚本以允许用户输入坐标以更新点的位置。

 rows = arcpy.UpdateCursor("C:\Users\Hannah\Desktop\Marcellus Shale data\GDB and Maps\Marcellus.gdb\Marcellus_Wells\Update_Cursor")
for row in rows:
    row.Latitude = float(raw_input('Latitude: '))
    rows.updateRow(row)
del row
del rows

rows = arcpy.UpdateCursor("C:\Users\Hannah\Desktop\Marcellus Shale data\GDB and Maps\Marcellus.gdb\Marcellus_Wells\Update_Cursor")
for row in rows:
    row.Longitude = float(raw_input('Longitude: '))
    rows.updateRow(row)
del row
del rows


inFeatures = ["C:\Users\Hannah\Desktop\Marcellus Shale data\GDB and Maps\Marcellus.gdb\Marcellus_Wells\Update_Cursor"]
outLocation = "C:\Users\Hannah\Desktop\Marcellus Shale data\GDB and Maps\Database Script\Shapefiles"
arcpy.FeatureClassToShapefile_conversion(inFeatures, outLocation)
Run Code Online (Sandbox Code Playgroud)

脚本“有效”;也就是说,我在最后创建的 shapefile 在旧坐标的位置包含新坐标。但是,当我将新的 shapefile 拖入 ArcMap 屏幕时,该点会转到旧坐标的位置,即使属性表正在显示新坐标。

有什么想法吗?谢谢!

python gis arcgis arcpy

0
推荐指数
1
解决办法
2218
查看次数

Python 方法调用中变量的赋值

在方法调用中分配变量的目的、好处或想法是什么?

例如,具有以下签名的方法:

def get_version(self, workspace):
Run Code Online (Sandbox Code Playgroud)

可以这样调用:

fgdbversion_id = repos.get_version(workspace=test_workspace)
Run Code Online (Sandbox Code Playgroud)

显然这将workspace参数设置为test_workspace,但为什么不直接发送get_version(test_workspace)。这难道不会达到同样的目的吗?我想不会,否则为什么要这样做。如果分配在方法端,它将是默认值,但我在调用端没有得到它。

我尝试用多种不同的方式进行谷歌搜索,但找不到任何内容。

先感谢您。

python parameters methods arcpy

0
推荐指数
1
解决办法
1041
查看次数

分割和计数Python字符串

所以我有一个字符串:

stringvar = "one;two;three;four"
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

stringcount = 4
string1 = "one"
string2 = "two"
string3 = "three"
string4 = "four"
Run Code Online (Sandbox Code Playgroud)

有时会有更多的情况,有时会有更少的情况,当然值可以是任意的。我想在';'处分割字符串 分成单独的变量,然后再提供另一个给出变量数量的变量。

谢谢

python arcpy

-2
推荐指数
1
解决办法
2万
查看次数