如何在Python中将XLSX文件正确转换为TSV文件?

时间:2019-01-03 11:50:01

标签: python csv unicode xlsx

我正在将大型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 :(得分:0)

我能够使用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')