如何在Python中把分隔空间的文件转换成CSV?

669 阅读3分钟

将一个以空格分隔的文件转换为逗号分隔的数值(CSV)文件的最简单方法是使用下面三行代码。

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

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

问题的提出

给定一个以空格分隔的文件,在某一列的两个值之间有一个或多个空位

输入: 'my_file.txt'

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

如何将以空格分隔的数值转换成逗号分隔的数值(CSV)文件?

输出: 'my_file.csv'

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

我们还将研究这个问题的微小变化。开始吧!

方法1:字符串替换单个空白处

在Python中,将以空格分隔的文件转换为以逗号分隔的(CSV)文件的最直接的方法是用逗号',' ,将每个空的空格' '[string.replace()](https://blog.finxter.com/python-string-replace-2/)方法将每个空位替换成一个逗号。如果两个值正好被一个空位隔开,这个方法就有效。

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

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

这里有一个例子,是将以空格分隔的文件转换成CSV文件的一些代码。

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

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

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

输出文件'my_file.csv'

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

方法2:Regex替换任意空白处

要用逗号替换两个列值之间的一个或多个空位',' ,并得到一个CSV,请在空格分隔的re.sub('[ ]+', ',', data) ,使用正则表达式操作data 。如果你还需要替换表格中的字符,请使用 re.sub('[ **\t**]+', ',', data)来代替。

下面是一个输入文件的例子'my_file.txt' ,注意可能分隔两列数值的额外的空白。

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

这里有一个例子,是将以空格分隔的文件转换为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'

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

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

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

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

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

下面是一个将以空格分隔的文件转换为CSV文件的一些代码的例子。

import pandas as pd

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

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

输出文件'my_file.csv'

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

总结

我们研究了三种将以空格分隔的文件转换为逗号分隔的CSV文件的好方法。