2015-04-20 2 views
1

Пытается преобразовать .tsv в .csv. Это:Как преобразовать .tsv в .csv?

import csv 

# read tab-delimited file 
with open('DataS1_interactome.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('interactome.csv','wb') as fou: 
    cw = csv.writer(fou, quotechar='', quoting=csv.QUOTE_NONE) 
    cw.writerows(filecontents) 

дает мне эту ошибку:

File "tsv2csv.py", line 11, in <module> 
    cw.writerows(filecontents) 
_csv.Error: need to escape, but no escapechar set 
+1

Почему вы не просто сделать поиск и замену с закладками запятой на содержимое файла? 'fileContent = re.sub (" (? ism) \ t ",", ", fileContent) ' –

+1

@PedroLobito Черт, ниндзя! Кроме того, вам может потребоваться изменить 'quotechar = ''' на 'quotechar = '' ''. –

+0

Я бы назвал вас этим ответом http://stackoverflow.com/questions/2535255/fastest-way-convert-tab- разделителями-файл к CSV-в-Linux ли эта помощь? – dparadis28

ответ

2

При попытке записи в файл CSV, он встречает токен, где он должен вставить экранирующий символ. Однако вы его не определили.

Dialect.escapechar

A one-character string used by the writer to escape the delimiter if quoting is set to QUOTE_NONE and the quotechar if doublequote is False. On reading, the escapechar removes any special meaning from the following character. It defaults to None, which disables escaping.

Источник: https://docs.python.org/2/library/csv.html#csv.Dialect.escapechar

Пример кода:

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

Каким будет правильный escape-символ в CSV-файле? –

+0

Как правило, вы должны использовать обратную косую черту в качестве символа escape , Я обновил свой ответ с помощью правильного escapechar. –

+0

Кстати, это двойная обратная косая черта, потому что на самом деле это символ escape в Python; '\\' означает «Персонаж». В противном случае он будет рассматривать апостроф после него как символ, а не токен. –

1

TSV тип файла, в котором поля разделяются табуляцией. Если вы хотите, чтобы конвертировать TSV в CSV (значение, разделенное запятой), вам просто нужно найти и заменить от TAB до COMMA.

Update:
Как отметил don-roby, «Там может быть запятые в ЦВ», для этого мы используем регулярное выражение, чтобы избежать всех Csv специальные символы, как определяет по rfc4180.

т.е .:

import re 
tsv = open('tsv.tsv', 'r') 
fileContent = tsv.read() 
appDesc = re.sub("""(?ism)(,|"|')""", r"\\\1", appDesc) # escape all especial charaters (" ' ,) rfc4180 
fileContent = re.sub("\t", ",", fileContent) # convert from tab to comma 
csv_file = open("csv.csv", "w") 
csv_file.write(fileContent) 
csv_file.close() 
+0

Хотя это, конечно же, будет работать, использование парсеров - отличное упражнение для начинающих программистов!Это хороший шанс воспользоваться некоторыми другими инструментами, чем вы обычно использовали в сценариях. –

+0

@ErikDolor Спасибо и удачи в вашей новой карьере. Не могли бы вы ответить на вопрос, который я опубликовал в ответ? (Какой был бы правильный символ escape в CSV-файле?) Tks :) –

-1
import sys 
import csv 

tabin = csv.reader(open('sample.txt'), dialect=csv.excel_tab) 
commaout = csv.writer(open('sample.csv', 'wb'), dialect=csv.excel) 

for row in tabin: 
    commaout.writerow(row) 
+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. –

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