ArcGIS:Python - 在字符串中添加逗号
ArcGIS:Python - Adding Commas to a String
在 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
主要问题是它如何逐步遍历具有不同长度 (11 -> 77) 的多行 (76)。我得到了最后的部分工作,只是没有内部循环,因为它 returns 长度超过 22 个字符的字符串的错误或不正确的输出。
因此现在:
1. 01234567890 returns 01234567890
2. 0123456789001234567890 returns 01234567890,01234567890
3. 012345678900123456789001234567890 returns either: Error or ,, or even ,,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)
不要自己做循环,使用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 中,我将大量带状多边形与另一组相交,并记录了原始区域 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
主要问题是它如何逐步遍历具有不同长度 (11 -> 77) 的多行 (76)。我得到了最后的部分工作,只是没有内部循环,因为它 returns 长度超过 22 个字符的字符串的错误或不正确的输出。
因此现在:
1. 01234567890 returns 01234567890
2. 0123456789001234567890 returns 01234567890,01234567890
3. 012345678900123456789001234567890 returns either: Error or ,, or even ,,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)
不要自己做循环,使用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'