web-dev-qa-db-fra.com

Comment convertir un fichier séparé par des tabulations au format CSV?

J'ai un fichier texte dans ce format:

{

attribute1 attribute2 attribute3.... attributeN

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

/* next line of values*/

}

Chaque mot est séparé par un onglet.

Comment convertir au format CSV? J'ai essayé d'utiliser Excel mais cela donne des problèmes de compatibilité.

18
Sreesha Nair

Importez les données avec Excel (Données> Charger à partir d'un fichier texte), en utilisant tab comme séparateur de colonnes. Enregistrez ensuite le fichier au format csv.

Il ne peut pas avoir de problèmes de compatibilité, c'est une tâche de base et je l'ai fait assez souvent dans le passé.

25
Luca Fagioli

Si vous pouvez utiliser un langage de script , vous pouvez donner Python un coup:

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)

Exemple de session interprète:

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

Remarques:

Exemple alternatif de terminaison de ligne:

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

Voici du code Excel-VBA qui effectuera cette conversion. Collez-le dans l'éditeur visuel de base d'Excel (Alt-F11) et exécutez-le (après avoir ajusté vos noms de fichiers, bien sûr).

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