ArcGIS:Python-在字符串中添加逗号

ArcGIS:Python-在字符串中添加逗号,python,arcgis,Python,Arcgis,在ArcGIS中,我将大量分区多边形与另一组多边形相交,并记录了原始分区ID及其连接的数据。但是,创建的字符串是一个从11到77的长数字列表(每个ID有11个字符长)。我希望在每一个文件之间添加一个“,”,以便以后更容易阅读和导出为.csv文件。为此,我编写了以下代码: def StringSplit(StrO,X): StrN = StrO #Recording original string StrLen = len(StrN) BStr = StrLen/X #How ma

在ArcGIS中,我将大量分区多边形与另一组多边形相交,并记录了原始分区ID及其连接的数据。但是,创建的字符串是一个从11到77的长数字列表(每个ID有11个字符长)。我希望在每一个文件之间添加一个“,”,以便以后更容易阅读和导出为.csv文件。为此,我编写了以下代码:

def StringSplit(StrO,X):
  StrN = StrO #Recording original string 
  StrLen = len(StrN) 
  BStr = StrLen/X #How many segments are inside of one string
  StrC = BStr - 1 #How many times it should loop
  if StrC > 0:  
    while StrC > 1:
      StrN = StrN[ :((X * StrC) + 1)] + "," + StrN[(X * StrC): ]
      StrC = StrC - 1
    while StrC == 1:
      StrN = StrN[:X+1] + "," + StrN[(X*StrC):]
      StrC = 0 
    while StrC == 0:
      return StrN
  else:
    return StrN
主要问题是它必须如何单步通过多个不同长度的行(76)(11->77)。我让最后的部分工作,只是没有内部循环,因为它返回一个错误或不正确的字符串长度超过22个字符的输出

因此现在:

import re

x = re.findall('...........', '01234567890012345678900123456789001234567890')

print(x)
myString = ",".join(x)

print(myString)
['01234567890', '01234567890', '01234567890', '01234567890']
01234567890,01234567890,01234567890,01234567890
x = ",".join(re.findall('...........', '01234567890012345678900123456789001234567890'))


print(x)
1.01234567890返回01234567890

2.0123456789001234567890返回0123456789001234567890

3.012345678900123456789001234567890返回错误或、甚至、01234567890


我知道这可能是我缺少的一些非常简单的东西,但我似乎不记得它是什么…

这可以很容易地由正则表达式完成。 这些
…..
是11个点,表示每11个字符进行一次分割

可以使用pandas从阵列输出创建csv

代码:

import re

x = re.findall('...........', '01234567890012345678900123456789001234567890')

print(x)
myString = ",".join(x)

print(myString)
['01234567890', '01234567890', '01234567890', '01234567890']
01234567890,01234567890,01234567890,01234567890
x = ",".join(re.findall('...........', '01234567890012345678900123456789001234567890'))


print(x)
输出:

import re

x = re.findall('...........', '01234567890012345678900123456789001234567890')

print(x)
myString = ",".join(x)

print(myString)
['01234567890', '01234567890', '01234567890', '01234567890']
01234567890,01234567890,01234567890,01234567890
x = ",".join(re.findall('...........', '01234567890012345678900123456789001234567890'))


print(x)
为了简单起见,您可以这样做

代码:

import re

x = re.findall('...........', '01234567890012345678900123456789001234567890')

print(x)
myString = ",".join(x)

print(myString)
['01234567890', '01234567890', '01234567890', '01234567890']
01234567890,01234567890,01234567890,01234567890
x = ",".join(re.findall('...........', '01234567890012345678900123456789001234567890'))


print(x)

不要自己做循环,使用python库或内置程序,这样会更容易。例如:

def StringSplit(StrO,X):
    substring_starts = range(0, len(StrO), X)
    substrings = (StrO[start:start + X] for start in substring_starts)
    return ','.join(substrings)

string = '1234567890ABCDE'
print(StringSplit(string, 5))

# '12345,67890,ABCDE'

当我在ArcGIS的python编辑器中尝试此解决方案时,导入函数似乎无法获取“re”模块。只不过是吐出一个错误,然后把编辑给毁了。至少不是在动态的Pre-Logic脚本代码中,这是我在尝试加载导入之前首先尝试解决的问题。谢谢,这很有帮助,尽管它现在将其作为另一种类型读取。由于ArcGIS不喜欢相同的字段串联,因此当它将['X'、'Y'、'Z']列表读入字符串值行时,它不知道该如何处理它。因此,我需要在“,”中进行编辑,同时将其作为单个字符串['X,Y,Z']进行维护。是的,现在可以使用了,Gelineau的解决方案也是如此。非常感谢你的帮助!我仍然稍微习惯了这一切,因为我在学习编码和编程的过程中,一半是自学的。因此,我的代码有时可能有点粗野。Gelineau,也谢谢你的解决方案。代码一开始不起作用,不确定原因,但在第二次尝试后(很可能是我复制了错误的代码),它工作得很好。由于我仍然稍微习惯编程(主要是自学和修改),我的代码可能有点暴力尝试,而不是像这样优雅的东西。再次感谢!很高兴能帮助你。如果我的回答对你有帮助,你可以投票给它:-)不幸的是,我还没有达到15的声誉,所以尽管我投票给了你的帖子,但它没有出现-对不起。