2011-04-08 4 views
16

У меня есть текстовый файл в этом формате:Как преобразовать файл с разделителями вкладок в формат CSV?

{ 

attribute1 attribute2 attribute3.... attributeN 

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

/* next line of values*/ 

} 

Каждое слово, разделенные табуляцией.

Как мне преобразовать в формат CSV? Я пробовал использовать Excel, но он дает проблемы совместимости.

+0

Обратите внимание, что CSV не является очень определенным форматом. Некоторые используют ";" как разделитель, некоторые используют «,». Форматирование даты также очень изменчиво и возможность разграничения строк с «нет». Вы должны уточнить эти требования у своего клиента (человека или процесса). –

ответ

22

Импортируйте данные с помощью excel (Данные> Загрузить из текстового файла), используя вкладку в качестве разделителя столбцов. Затем сохраните файл как csv.

У него нет проблем с совместимостью, это основная задача, и я делал это довольно часто в прошлом.

10

Если вы можете использовать scripting language, вы могли бы дать Python выстрел:

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) 

Пример интерпретатора сессии:

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

Примечания:

  • default field delimiter является ,.

  • default line terminator для csv.writer\r\n это, но если у вас есть необходимость сделать это, вы можете указать альтернативу в качестве ключевого слова аргумента AKA kwarg.

Альтернативный пример линии терминатора:

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

Вот некоторые Excel-VBA код, который будет делать это преобразование. Вставьте это в визуальный базовый редактор Excel (Alt-F11) и запустите его (после настройки ваших имен файлов, конечно).

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: он также должен удалить пустые строки, а также с помощью {и } –

+0

Почему? Не обязательно. Зависит от того, что хочет OP. Мой код выводит файл в формате «CSV» по запросу, но [«CSV» действительно означает только одно) (http://en.wikipedia.org/wiki/ Comma-separated_values): значения разделяются запятыми (обычно) и разрывами строк. Я не могу предвидеть, нуждается ли OP в '{' и '}' и пустых строках в приложении-получателе. Если OP дает однозначный пример от желаемого результата, тогда у нас будет возможность правильно ответить. –

Смежные вопросы