Как правильно преобразовать файл XLSX в файл TSV в Python? - PullRequest
0 голосов
/ 03 января 2019

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

Деформированный файл TSV Deformed TSV file

1 Ответ

0 голосов
/ 04 января 2019

Мне удалось решить проблему с помощью pandas dataframe.

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