Python - Создание новой таблицы vfp с модулем dbf содержит нечитаемые файлы заметок - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь скопировать таблицу Visual FoxPro 9 в dbf / ftp, добавить к ней пару столбцов и заполнить их некоторыми данными из pandas DataFrame. Я использую модуль dbf , который, кажется, хорошо работает для большинства моих приложений.

На этот раз я столкнулся с проблемой c: хотя мой код действительно создает новая таблица и довольно неплохо ее заполняет, я совершенно не могу получить доступ к полям memo впоследствии в FoxPro или в моем (довольно устаревшем) программном обеспечении, которое все еще работает на нем и которому нужны эти новые столбцы.

поля memo загружается как «имя M» и переносится в новую таблицу как есть. Моя версия библиотеки - 0.98.3, и Конда сообщает мне, что она обновлена.

Мой код:

table = dbf.Table(dbf_path).open()

structure = table.structure()
structure[-5] = 'date T NULL'   #<-- I'm doing this because the initial struc for
                                #    this field is 'date T binary' which raise an
                                #    exception and prevents me from doing anything
                                #    afterwards

with table.new(new_dbf_path,
               field_specs=structure,
               ignore_memos=False    #<-- I tried playing with this, but it didn't  
               ) as new:             #    seem to change anything


    new.add_fields(['field_1 N(6,0)', 'field_2 N(6,1)',
                    'field_3 N(6,0)', 'field_4 N(6,1)'])

    count=0
    for record in table:
        listrec = list(record)

        field_1 = data.at[count, 'field_1']
        field_2 = data.at[count, 'field_2']
        field_3 = data.at[count, 'field_3']
        field_4 = data.at[count, 'field_4']

        listrec += [field_1 if not np.isnan(field_1) else -999,
                    field_2 if not np.isnan(field_3) else -999,
                    field_3 if not np.isnan(field_4) else -999,
                    field_4 if not np.isnan(field_5) else -999
                    ]

        new.append(tuple(listrec))
        count+=1

table.close()
...