Python 2.7 Невозможно получить доступ к CSV-файлу, который я только что записал для редактирования данных. Ранее работал с курсором поиска - PullRequest
0 голосов
/ 05 августа 2020

Я использую 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...