Я конвертирую большие файлы XLSX (более 60 столбцов и 3000 строк) в формат TSV. Некоторые поля содержат текст с 2-3 абзацами (многострочный перевод). Я хочу поддерживать UTF-8, и я хочу, чтобы каждая строка отображалась в строке в результирующем TSV
Я сделал следующее:
import xlrd
import csv
# open the tsv file(output) in unicode format
with open('outTSV.tsv', 'w', encoding='utf-8') as TSVfile:
wr = csv.writer(TSVfile, delimiter = "\t")
# open the xlsx file
xlfile = xlrd.open_workbook('inXLSX.xlsx')
# retrieve sheet
sheet = xlfile.sheet_by_index(0)
# write rows into TSVfile
for row in range(sheet.nrows):
wr.writerow(sheet.row_values(row))
Я ожидал, что каждая строка в файле XLSX будет преобразована в строку в файле TSV. Однако, поскольку в некоторых ячейках есть абзацы, он переводит их как символы новой строки. Поэтому получаются деформированные файлы TSV.
XLSX файл
@Daniel: да, они заключены в ", но поскольку я собираюсь обработать TSV в другом рабочем процессе, мне нужно все это в одной строке.
Как этот рабочий процесс разное обрабатывает символы новой строки?
Он считывает всю строку и сопоставляет столбец со значением. Таким образом, я считаю, что во второй строке он неправильно читает всю строку.
Изображение файла TSV бесполезно. Пожалуйста, вставьте как текст. Кроме того, модуль csv в Python 3 определяет использование newline='' при открытии файлов. Ваш файл TSV выглядит с двойным интервалом, и это может быть причиной.
@Malyk "... я полагаю, он неправильно читает всю строку". Вы пробовали это? Запись выглядит правильно процитированной, и правильный синтаксический анализатор CSV должен ее обработать.






Мне удалось решить проблему с помощью фрейма данных pandas.
import pandas as pd
#Read excel file into a dataframe
data_xlsx = pd.read_excel('excel.xlsx', 'Sheet1', index_col=None)
#Replace all columns having spaces with underscores
data_xlsx.columns = [c.replace(' ', '_') for c in data_xlsx.columns]
#Replace all fields having line breaks with space
df = data_xlsx.replace('\n', ' ',regex=True)
#Write dataframe into csv
df.to_csv('fileTSV.csv', sep='\t', encoding='utf-8', index=False, line_terminator='\r\n')
Вы получаете совершенно корректный TSV файл, поля с символами новой строки заключены в
". Что тебе нужно?