2015-10-22 9 views
1

Я пытаюсь читать строки данных из csv и добавлять их в виде записей в существующую dbf Visual FoxPro. Существующий Visual FoxPro dbf имеет много полей длиной более 10 символов, но это вызывает ошибку при использовании модулей dbf или dbfpy.Python 2.7- чтение данных из csv и запись в Vfp dbf с именами полей длиной более 10 символов

Ниже приведен пример с упрощенной версией структуры таблицы:

import dbf 
table=dbf.from_csv('seasdate.csv',field_names="zone_num season_code",dbf_type='Vfp') 
#table to write to 
table2=('temptable','zone_num C(2); season_code C(1)',dbf_type='Vfp') 
for datum in table: 
    table2.append(datum) 

Это возвращает: 'dbf.ver_2.FieldSpecError: Максимальная длина имени поля равна 10. „season_code“ имеет длину 11 символов.

Я знаю, что в таблице Vfp возможно иметь имя поля длиной более 10 символов, поскольку, как я уже упоминал, таблица, которую я в конечном итоге добавлю, уже существует. Любая помощь очень ценится!

+0

Я не помню, чтобы длинные имена полей повторялись; можете ли вы прислать мне небольшой dbf с несколькими длинными именами полей? Я посмотрю что я могу сделать. Моя электронная почта находится в пакете. –

+0

Привет, Итан, я попробовал отправить электронное письмо на адрес, указанный в пакете, и он вернулся. – herdnerd

+0

Это мое имя у нас на камне. –

ответ

1

Я не использую dbfpy, но глядя на этот синтаксис, похоже, что вы создаете новые «бесплатные» таблицы. Имя полей свободных таблиц ограничено 10.

Возможно, вы должны посмотреть на www.leafe.com и Dabo Framework. Эд Лиф из сообщества VFP, и он хорошо знает форматы базы данных VFP.

+0

Фрагмент кода не показывает 'dbfpy'. –

+0

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

0

Как правило, имена полей, хранящиеся в файле .dbf, составляют всего 10 символов - первые 10, как это бывает (я не уверен, что первые 10 символов должны быть уникальными или как VFP ручки, что, хотя) Так что, если ваши имена полей являются уникальными в первые 10, просто использовать укороченные имена:.

table2=('temptable','zone_num C(2); season_cod C(1)',dbf_type='Vfp') 

в настоящее время dbf не поддерживает длинные имена полей. Если вы хотите получить мне образец VFP .dbc с длинными именами полей, я был бы рад взглянуть на добавление этой поддержки.

+0

Visual FoxPro поддерживает длинные имена столбцов, сохраняя их как метаданные отдельно в a в «DBC» (DataBaseContainer, переименованный DBF). Например, в VFP9 вы можете 'CREATE DATABASE longnames', а затем' CREATE TABLE longnames1 (column1integer Int, column2varchar100 varchar (100)) '. Я могу отправить вам двоичные файлы, если вы хотите. –

+0

@StefanWuebbe: Пожалуйста, сделайте, у меня больше нет доступа к VFP. –