2011-04-08 7 views
16

Ho un file di testo in questo formato:Come convertire un file separato da tabulazioni in formato CSV?

{ 

attribute1 attribute2 attribute3.... attributeN 

value"A" value"B" value"C".... value"Z" 

/* next line of values*/ 

} 

Ogni parola è separato da una scheda.

Come si converte in formato CSV? Ho provato a usare Excel ma sta dando problemi di compatibilità.

+0

Si noti che CSV non è un formato molto definito. Alcuni usano ";" come separatore, alcuni usano il ",". La formattazione della data è anche molto variabile, e l'opzione per delimitare le stringhe con o no. Dovresti chiarire questi requisiti con il tuo cliente (persona o processo) –

risposta

22

Importare i dati con Excel (Dati> Carica da file di testo), utilizzando la scheda come separatore di colonne. Quindi salva il file come csv.

Non può avere problemi di compatibilità, è un compito di base e l'ho fatto abbastanza spesso in passato.

10

Se è possibile utilizzare un scripting language, si potrebbe dare Python un colpo:

import csv 

# read tab-delimited file 
with open('yourfile.tsv','rb') as fin: 
    cr = csv.reader(fin, delimiter='\t') 
    filecontents = [line for line in cr] 

# write comma-delimited file (comma is the default delimiter) 
with open('yourfile.csv','wb') as fou: 
    cw = csv.writer(fou, quotechar='', quoting=csv.QUOTE_NONE) 
    cw.writerows(filecontents) 

Esempio sessione interprete:

>>> import csv 
>>> with open('yourfile.tsv','rb') as fin: 
...  cr = csv.reader(fin, delimiter='\t') 
...  filecontents = [line for line in cr] 
... 
>>> with open('yourfile.csv','wb') as fou: 
...  cw = csv.writer(fou, quotechar='', quoting=csv.QUOTE_NONE) 
...  cw.writerows(filecontents) 
... 
>>> with open('yourfile.csv','rb') as see_how_it_turned_out: 
...  for line in see_how_it_turned_out: 
...   line 
... 
'attribute1,attribute2,attribute3,attributeN\r\n' 
'value"A",value"B",value"C",value"Z"\r\n' 

Note:

alternativa esempio line-terminator:

with open('yourfile.csv','wb') as fou: 
    cw = csv.writer(fou,quotechar='',quoting=csv.QUOTE_NONE,lineterminator='\n') 
    ... 
0

Ecco un po 'di codice Excel-VBA che farà questa conversione. Incollalo nell'editor di Visual Basic di Excel (Alt-F11) ed eseguilo (dopo aver regolato i nomi dei file, ovviamente).

Sub TabToCsv() 

    Const ForReading = 1, ForWriting = 2 
    Dim fso, MyTabFile, MyCsvFile, FileName 
    Dim strFileContent as String 
    Set fso = CreateObject("Scripting.FileSystemObject") 

    ' Open the file for input. 
    Set MyTabFile = fso.OpenTextFile("c:\testfile.dat", ForReading) 

    ' Read the entire file and close. 
    strFileContent = MyTabFile.ReadAll 
    MyTabFile.Close 

    ' Replace tabs with commas. 
    strFileContent = Replace(expression:=strFileContent, _ 
          Find:=vbTab, Replace:=",") 
    ' Can use Chr(9) instead of vbTab. 

    ' Open a new file for output, write everything, and close. 
    Set MyCsvFile = fso.OpenTextFile("c:\testfile.csv", ForWriting, True) 
    MyCsvFile.Write strFileContent 
    MyCsvFile.Close 

End Sub 
+0

@jfc: dovrebbe anche eliminare le righe vuote e quelle con {e } –

+0

Perché? Non necessariamente. Dipende dall'OP. Il mio codice emette un file in "formato CSV" come richiesto, ma ["CSV" significa realmente solo una cosa] (http://en.wikipedia.org/wiki/ Comma-separated_values): i valori sono separati da virgole (di solito) e interruzioni di riga.Non posso pregiudicare se l'OP ha bisogno di '{' e '}' e di righe vuote nell'applicazione destinatario. Se OP fornisce un esempio non ambiguo dell'output desiderato, avremo la possibilità di rispondere correttamente. –