2010-12-14 14 views
10

Come posso convertire un file .csv in un file .dbf usando uno script python? Ho trovato questo codice piece online ma non sono sicuro di quanto sia affidabile. Ci sono dei moduli là fuori che hanno questa funzionalità?Converti il ​​file .csv in .dbf usando Python?

+3

Google mi racconta di http://www.fiby.at/dbfpy/ e http://pypi.python.org/pypi/dbf/0.88.16. Il formato 'dbf' sembra piuttosto semplice, però; dovresti essere in grado di controllare il codice che hai postato tu stesso. – katrielalex

risposta

5

Non si trova nulla sulla rete che legge un file CSV e scrive un file DBF tale che è sufficiente invocarlo e fornire 2 percorsi di file. Per ciascun campo DBF è necessario specificare il tipo, la dimensione e (se pertinente) il numero di cifre decimali.

Alcune domande:

Quale software sta per consumare il file di output DBF?

Non esiste il formato di file "DBF" (uno e solo). Hai bisogno di dBase III? dBase 4? 7? Visual FoxPro? eccetera?

Qual è la lunghezza massima del campo di testo che è necessario scrivere? Hai un testo non ASCII?

Quale versione di Python?

Se le vostre esigenze sono minime (formato dBase III, nessun testo non ASCII, testo < = 254 byte, Python 2.X), la ricetta del libro di cucina che avete citato dovrebbe fare il lavoro.

+0

Sì, capisco un po 'meglio come .csv può essere convertito in dbf ora. Il software che sto usando è ArcGIS, tuttavia non riesco a trovare le specifiche del formato .dbf. Non esiste un testo non ASCII, la versione python è 2.6 e la lunghezza massima del campo di testo è di 20 caratteri. – djq

5

Utilizzare csv library per leggere i dati dal file csv. La libreria di terze parti dbf può scrivere un file dbf per te.

Modifica: Originariamente, ho elencato dbfpy, ma la libreria sopra sembra essere più attivamente aggiornata.

+1

Sembra una libreria funzionale, se non molto pitonica. Aggiungo sicuramente questo ai miei segnalibri --- grazie per il link! –

+0

Il più grande svantaggio sembra essere una documentazione terribile, che è un problema con molti progetti open source. – syrion

+2

Purtroppo la documentazione per dbf è così limitata che non riesco nemmeno a capire come usarla. Ci sono alcune linee di codice di esempio (che lo rendono piuttosto facile), ma non funzionano. Tuttavia, grazie per la risposta! – djq

2

Nessuno che sia ben lucido, per quanto ne so. Ho dovuto lavorare con i file xBase molte volte nel corso degli anni, e continuo a trovarmi a scrivere codice per farlo quando devo farlo. Ho, da qualche parte in uno dei miei backup, una libreria Python piuttosto funzionale, pura per farlo, ma non so esattamente dove sia.

Fortunatamente, il formato di file xBase non è poi così complesso. È possibile trovare le specifiche on the Internet, naturalmente. A prima vista il modulo che hai collegato sembra bello, ma ovviamente crea copie di qualsiasi dato con cui stai lavorando prima di usarlo.

Una libreria xBase solida, in lettura/scrittura, perfettamente funzionante con tutti i campanelli e fischietti è qualcosa che è stato sulla mia lista TODO per un po '... potrei anche arrivare ad esso in quello che è rimasto quest'anno, se Sono fortunato ... (probabilmente no, però, purtroppo).

7

Utilizzando il dbf package è possibile ottenere un file CSV base con codice simile a questo:

import dbf 
some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True) 

Questo creerà tabella con lo stesso nome e carattere o Memo campi ei nomi dei campi di f0, f1, f2 , ecc.

Per un nome file diverso utilizzare il parametro filename e, se si conoscono i nomi dei campi, è possibile utilizzare anche il parametro field_names.

some_table = dbf.from_csv(csvfile='data.csv', filename='mytable', 
     field_names='name age birth'.split()) 

Una documentazione di base è disponibile here.

Divulgazione: Sono l'autore di questo pacchetto.

+0

ha funzionato bene per me. Solo una nota: il csv non dovrebbe avere un'intestazione nell'esempio, altrimenti l'intestazione viene analizzata come una riga normale. – grasshopper

+0

Sono un po 'confuso: sto guardando dbf 0.96.005, ma non riesco a capire in modo decisivo se la lettura e la scrittura di file DBase IV sono supportati o meno. Ora sto usando dbfpy, ma sono ansioso di allontanarmi definitivamente da Python 2 ... – parvus

+0

dBase IV non è ancora supportato. –

2

Qui ho creato uno script Python. Dovrebbe essere personalizzabile per qualsiasi layout csv. È necessario conoscere la struttura dei dati DBF prima che ciò sia possibile. Questo script richiede due file CSV, uno per l'impostazione dell'intestazione DBF e uno per i dati del tuo corpo. in bocca al lupo.

https://github.com/mikebrennan/csv2dbf_python

+0

Il tuo esempio usa dbfpy, che sfortunatamente non sembra essere mantenuto e non è aggiornato per l'uso in Python3 - usa CStringIO, ao Ma se uno è OK con Python 2, questo esempio dovrebbe fornire un inizio di salto. – parvus