Sembra che i dati sono in un formato "text-table".
Si consiglia di utilizzare la prima riga per calcolare il punto iniziale e la lunghezza di ogni colonna (a mano o scrivere uno script con regex per determinare le colonne probabili), quindi scrivere uno script per iterare le righe del file, suddividere la riga in segmenti di colonna e applicare la striscia a ciascun segmento.
Se si utilizza un'espressione regolare, è necessario tenere traccia del numero di colonne e generare un errore se una determinata riga ha più del numero previsto di colonne (o un numero diverso rispetto al resto). La suddivisione in due o più spazi si interromperà se il valore di una colonna ha due o più spazi, il che non è solo del tutto possibile, ma anche probabile. Le tabelle di testo come questa non sono progettate per essere divise in un'espressione regolare, sono progettate per essere suddivise nelle posizioni dell'indice della colonna.
In termini di salvataggio dei dati, è possibile utilizzare il modulo csv per scrivere/leggere in un file csv. Ciò ti consentirà di gestire le virgolette e i caratteri di escape meglio di specificare un delimitatore. Se una delle tue colonne ha un valore |
come valore, a meno che tu non stia codificando i dati con una strategia che gestisca gli escape oi valori letterali quotati, l'output si interromperà in lettura.
Analisi del testo di cui sopra sarebbe simile a questa (i annidati la comprensione lista con staffe al posto del tradizionale formato in modo che sia più facile da capire):
cols = ((0,34),
(34, 50),
(50, 59),
(59, None),
)
for line in lines:
cleaned = [i.strip() for i in [line[s:e] for (s, e) in cols]]
print cleaned
allora si può scrivere con qualcosa di simile:
import csv
with open('output.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter='|',
quotechar='"', quoting=csv.QUOTE_MINIMAL)
for line in lines:
spamwriter.writerow([line[col_start:col_end].strip()
for (col_start, col_end) in cols
])
C'è sempre più di uno spazio tra le colonne di dati? –
@ cricket_007 sì, sempre più di uno spazio – aysha
Non si dovrebbe usare regex, perché i dati potrebbero avere 2 o più spazi in una colonna. I dati sono in un formato tabella di testo, le colonne sp devono essere determinate dalla posizione di un carattere su ciascuna riga. –