2011-04-08 33 views
16

Tengo un archivo de texto con este formato:¿Cómo convertir un archivo separado por tabulaciones al formato CSV?

{ 

attribute1 attribute2 attribute3.... attributeN 

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

/* next line of values*/ 

} 

Cada palabra está separada por una pestaña.

¿Cómo convierto a formato CSV? Intenté usar Excel pero está dando problemas de compatibilidad.

+0

Tenga en cuenta que CSV no es un formato muy definido. Algunos usan ";" como el separador, algunos usan el ",". El formato de fecha también es muy variable y la opción para delimitar las cadenas con o sin. Debe aclarar esos requisitos con su cliente (persona o proceso). –

Respuesta

22

Importe los datos con Excel (Datos> Cargar desde archivo de texto), usando la pestaña como separador de columnas. A continuación, guarde el archivo como csv.

No puede haber problemas de compatibilidad, es una tarea básica y lo hice con bastante frecuencia en el pasado.

10

Si puede utilizar un scripting language, es posible dar Python un tiro:

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) 

Ejemplo sesión intérprete:

>>> 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' 

Notas:

  • El default field delimiter es ,.

  • El default line terminator para csv.writer es \r\n, pero si tiene una necesidad de hacer lo que es posible especificar una alternativa como un argumento de palabra clave También conocido como kwarg.

ejemplo de línea-terminador Alternativa:

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

Aquí hay un código de Excel VBA que va a hacer esta conversión. Pegue esto en el editor visual básico de Excel (Alt-F11) y ejecútelo (después de ajustar sus nombres de archivo, por supuesto).

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: también debe soltar las líneas vacías y aquellas con {y }. –

+0

¿Por qué? No necesariamente. Depende de lo que OP desee. Mi código genera un archivo en "formato CSV" según lo solicitado, pero ["CSV" realmente significa solo una cosa] (http://en.wikipedia.org/wiki/ Valores separados por comas): los valores están separados por comas (generalmente) y saltos de línea. No puedo prejuzgar si el OP necesita el '{' y '}' y líneas en blanco en la aplicación del destinatario. Si OP da un ejemplo inequívoco de la salida deseada, entonces tendremos la oportunidad de responder correctamente. –

Cuestiones relacionadas