如何用Python将Tab-Delimited文件转换为CSV?

359 阅读2分钟

将制表符分隔值(TSV)文件转换为逗号分隔值(CSV)文件的最简单方法是使用以下三行代码。

  1. import pandas as pd
  2. df = pd.read_csv('my_file.txt', sep='\t', header=None)
  3. df.to_csv('my_file.csv', header=None)

我们接下来会详细解释这个方法和其他方法--请滚动到方法3,了解这个确切的方法。

问题的提出

给出一个以制表符分隔的文件,在某一列的两个值之间有一个制表符'\t'

输入。 'my_file.tsv'

。文件'my_file.tsv' ,有制表符'\t' 分隔的数值。

Alice	DataScience	$100000
Bob	Programmer	$90000
Carl	Manager	$122000
Dave	Freelancer	$144000

如何将以制表符分隔的数值(TSV)转换成逗号分隔的数值(CSV)文件?

输出 'my_file.csv'

0,Alice,DataScience,$100000
1,Bob,Programmer,$90000
2,Carl,Manager,$122000
3,Dave,Freelancer,$144000

我们还将看看这个问题的轻微变化。开始吧!

方法1:字符串替换单个制表符

在Python中,将一个以制表符分隔的(TSV)文件转换为以逗号分隔的(CSV)文件的最直接的方法是用逗号',' ,将每个制表符'\t'[string.replace()](https://blog.finxter.com/python-string-replace-2/)方法将每个表格字符替换成一个逗号。如果两个值正好由一个表格字符分开,这就可以了。

这里有一个输入文件的例子'my_file.tsv'

这里有一个例子,是将Tab分隔的文件转换为CSV文件的一些代码。

with open('my_file.tsv') as f:

    # Read space-delimited file and replace all empty spaces by commas
    data = f.read().replace('\t', ',')

    # Write the CSV data in the output file
    print(data, file=open('my_file.csv', 'w'))

输出文件'my_file.csv'

方法2:Regex替换任意的制表符

要用逗号',' ,在两列值之间替换一个'\t' 或多个制表符'\t\t\t' ,并获得CSV,请在空格分隔的data ,使用正则表达式操作re.sub('[\t]+', ',', data)

下面是一个输入文件的例子'my_file.tsv' ,注意可能分隔两列数值的额外的表格字符。

这里有一个例子,是将TSV转换成CSV文件的一些代码。

import re

with open('my_file.txt') as infile:

    # Read space-delimited file and replace all empty spaces by commas
    data = re.sub('[ ]+', ',', infile.read())

    # Write the CSV data in the output file
    print(data, file=open('my_file.csv', 'w'))

输出文件'my_file.csv'

方法3:Pandas read_csv() 和 to_csv()

要将一个以制表符分隔的文件转换为CSV文件,首先使用pd.read_csv(filename, sep='\t+', header=None) 将文件读入Pandas DataFrame,然后使用df.to_csv(outfilename, header=None) 将DataFrame写入文件。

这里有一个输入文件的例子'my_file.tsv'

下面是一些代码的例子,将tab分隔的文件转换为CSV文件。

import pandas as pd

# Read space-delimited file
df = pd.read_csv('my_file.tsv', sep='\t+', header=None)

# Write DataFrame to file
df.to_csv('my_file.csv', header=None)

输出文件'my_file.csv'

如果你确定两列数值之间只有一个表格式的字符,你也可以使用更简单的sep='\t'