Как правильно преобразовать файл XLSX в файл TSV в Python?

Я конвертирую большие файлы 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 файл

Как правильно преобразовать файл XLSX в файл TSV в Python?

Деформированный файл TSVКак правильно преобразовать файл XLSX в файл TSV в Python?

Вы получаете совершенно корректный TSV файл, поля с символами новой строки заключены в ". Что тебе нужно?

Daniel 03.01.2019 12:59

@Daniel: да, они заключены в ", но поскольку я собираюсь обработать TSV в другом рабочем процессе, мне нужно все это в одной строке.

Malyk 03.01.2019 13:09

Как этот рабочий процесс разное обрабатывает символы новой строки?

Daniel 03.01.2019 13:12

Он считывает всю строку и сопоставляет столбец со значением. Таким образом, я считаю, что во второй строке он неправильно читает всю строку.

Malyk 03.01.2019 14:07

Изображение файла TSV бесполезно. Пожалуйста, вставьте как текст. Кроме того, модуль csv в Python 3 определяет использование newline='' при открытии файлов. Ваш файл TSV выглядит с двойным интервалом, и это может быть причиной.

Mark Tolonen 03.01.2019 18:00

@Malyk "... я полагаю, он неправильно читает всю строку". Вы пробовали это? Запись выглядит правильно процитированной, и правильный синтаксический анализатор CSV должен ее обработать.

Mark Tolonen 03.01.2019 18:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
2 720
1

Ответы 1

Мне удалось решить проблему с помощью фрейма данных 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')

Другие вопросы по теме