ArcGIS: Python - Добавление запятых в строку - PullRequest
0 голосов
/ 12 июня 2018

В ArcGIS я пересек большое количество зональных полигонов с другим набором и записал исходные идентификаторы зон и данные, с которыми они связаны.Однако создаваемые строки представляют собой один длинный список чисел в диапазоне от 11 до 77 (каждый идентификатор имеет длину 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 символов.

Таким образом, прямо сейчас:

1. 01234567890 возвращает 01234567890

2. 0123456789001234567890 возвращает 01234567890,01234567890

3. 01234567890012345678900034567890003: Ошибка или ,, или даже ,, 01234567890

Я знаю, что, возможно, что-то довольно простое, что мне не хватает, но я не могу вспомнить, что это такое ...

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Не создавайте циклы самостоятельно, используйте библиотеки 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'
0 голосов
/ 12 июня 2018

Это можно легко сделать с помощью регулярных выражений.эти ........... равны 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)
...