Я использую python 2.7 (я знаю ....) и не могу импортировать никакие модули pypi (eyeroll) - работа контролирует загрузку, обновления и т. Д. c.
Я пытаюсь редактировать данные в файле CSV, который я создал из класса пространственных объектов. Класс функций для csv выводит нормально.
Я пробовал 'с открытым' для доступа к CSV, он сохраняет ошибки с RuntimeError: невозможно открыть 'файл'.
Я также вернулся к попыткам использовать arcpy.da.searchcursor это ошибки с ошибкой ввода-вывода «нет такого файла или каталога». Файл существует и открывается в ArcMap, Notepad ++.
(ранее у меня была рабочая версия, которая редактировала данные с помощью курсора поиска, но не поддерживала порядок данных, поэтому я создал csv FIRST вместо конец.)
Вот фрагмент скрипта:
def fc_to_csv():
fields = ["ID", "ADMIN_ORG", "RTE_CN", "GIS_MILES"]
with open('{}.csv'.format(roadcore), 'wb') as outf:
dw = csv.DictWriter(outf, fieldnames=fields)
dw.writeheader()
with arcpy.da.SearchCursor(fc, fields) as rows:
for row in rows:
if row[3] == 0:
pass
elif row[3] == None:
pass
else:
dw.writerow(dict(zip(fields, row)))
print "File written: {}".format(roadcore)
#********FORMATTING LABELS********
def newlabel():
with open(roadcore, 'rb') as csvfile:
rc_reader = csv.reader(csvfile, delimiter=',')
for row in rc_reader:
# with arcpy.da.SearchCursor(roadcore, fields) as sc:
# for row in sc:
if row[0].startswith(' '):
labels.append('{}'.format(
row[0]
.replace(' ', '')))
elif row[1].startswith('01'):
labels.append('{}'.format(
row[0]
.lstrip(ascii_letters)
.replace(' ', '')
.replace('.', '-')
.lstrip('0')))
Экспорт в DBF тоже не работает - но думаю, я буду делать по одной проблеме за раз. Полный код:
fc = (r'D:\JJ_Development\Projects\Basemap\Transportation\Roads.gdb\RoadCore_Existing')
fields = ["ID", "ADMIN_ORG", "RTE_CN", "GIS_MILES"]#Don't use object id - when data is updated this can change.
identical = ["ID", "ADMIN_ORG", "RTE_CN"]
labels = []
rd_names = (' ROAD', ' STREET', ' DRIVE', ' BLUFF', ' COVE',' LOOP', ' LANE', ' RD', ' LN', ' DR')
#ADJUST R08 To skip Puerto Rico... all named roads.
#********Initial FS Roadcore Existing Data Cleanup********
#rc_existing = os.path.join(curr_dir, 'roadcore')
roadcore = os.path.join(curr_dir, 'rdlabels')
def fc_to_csv():
fields = ["ID", "ADMIN_ORG", "RTE_CN", "GIS_MILES"]
with open('{}.csv'.format(roadcore), 'wb') as outf:
dw = csv.DictWriter(outf, fieldnames=fields)
dw.writeheader()
with arcpy.da.SearchCursor(fc, fields) as rows:
for row in rows:
if row[3] == 0:
pass
elif row[3] == None:
pass
else:
dw.writerow(dict(zip(fields, row)))
print "File written: {}".format(roadcore)
#********FORMATTING LABELS********
def newlabel():
with open(roadcore, 'rb') as csvfile:
rc_reader = csv.reader(csvfile, delimiter=',')
for row in rc_reader:
# with arcpy.da.SearchCursor(roadcore, fields) as sc:
# for row in sc:
if row[0].startswith(' '):
labels.append('{}'.format(
row[0]
.replace(' ', '')))
elif row[1].startswith('01'):
labels.append('{}'.format(
row[0]
.lstrip(ascii_letters)
.replace(' ', '')
.replace('.', '-')
.lstrip('0')))
elif row[1].startswith('02'):
labels.append('{}'.format(row[0].lstrip(ascii_letters).replace(' ', '').replace('.', '-').lstrip('0')))
elif row[1].startswith('03'):
labels.append('{}'.format(
row[0]
.lstrip(ascii_letters)
.replace(' ', '')
.replace('.', '-')
.lstrip('0')))
elif row[1].startswith('04'):
labels.append('{}'.format(
row[0]
.lstrip(ascii_letters)
.replace('-ADMIN', '')
.replace('-A-ADMIN','')
.replace('-PARKING','')[2:]
.lstrip('0')
.replace('.', '-')))
elif row[1].startswith('05'):
labels.append('{}'.format(
row[0].rstrip('0')
.lstrip('0')
.lstrip(ascii_letters)
.replace('.', '-')))
elif row [1].startswith('0501'):
#Note: 0501 forest label data entered in unicode.
labels.append('{}'.format(
row[0].rstrip('0').split('.',1)
.replace(' ', '')))
elif row[1].startswith('06'):
labels.append('{}'.format(
row[0].rstrip('0')
.replace('.', '-')
.lstrip(ascii_letters)))
elif row[1].startswith('06'):
labels.append('{}'.format(
row[0].rstrip(ascii_letters)))
elif row[1].startswith('08'):
labels.append('{}'.format(
row[0].lstrip(ascii_letters)))
#Note: R08 label data entered in unicode.
elif row[1].startswith('09'):
#Note: R09 label data entered in unicode.
labels.append('{}'.format(
row[0].lstrip('0')
.replace('.', '-')
.lstrip(ascii_letters)))
elif row[1].startswith('10'):
labels.append('{}'.format(
row[0]
.lstrip('0')
.replace('.', '-')
.rstrip('0')
.lstrip(ascii_letters)))
else:
labels.append(row[0])
#print(labels)
print('Label formatting done')
#********CONVERT CSV TO DBASE TABLE IN GDB********
def cleanup_labels():
with open('roadcore', 'rb') as csvfile:
rc_reader = csv.reader(csvfile, delimiter=',')#, quotechar='|')
for row in rc_reader:
if row[0].startswith('-'):
labels.append('{}'.format(row[0].replace('-', '')))
elif row[0].endswith('-'):
labels.append('{}'.format(row[0].replace('-', '')))
elif row[0].endswith(rd_names):
labels.append('{}'.format(row[0].strip(ascii_letters)))
csvfile.close()
#Python 2.7 will not go directly from a list to a dbf. Python 3 has added a dbf module, step not needed in future versions.
#********CONVERT CSV TO DBASE TABLE IN GDB********
def dbfexport():
roadsgdb = arcpy.CreateFileGDB_management(curr_dir, 'Roads_labels.gdb')
print('gdb created')
arcpy.TableToDBASE_conversion('roadcore', roadsgdb)
# for filenames in os.listdir(curr_dir):
# if filenames.endswith('.csv'):
# arcpy.TableToTable_conversion(os.path.join(curr_dir, 'roadcore'), roadsgdb, os.path.splitext(filenames)[0] + ".dbf")
print('dBASE created')
if __name__ == '__main__':
fc_to_csv()#functions
newlabel()
# cleanup_labels()
# dbfexport()
end = time.time()
print(end-start)