分隔符号本身在项目中时,Python读取CSV文件问题

时间:2018-10-10 05:20:45

标签: python csv delimiter

我正在尝试使用csv.reader()将txt文件(逗号分隔符)读取为CSV文件。但是因为我的定界符(,)有时位于对象/项目中,所以读取项目的整个“行”都会移动。

示例:

input.txt:

Stevenson Corp, 123 Main St, 3 employees\n
Johnson Inc, 456 Main St, 5 employees\n

会导致CSV列为:

Stevenson Corp | 123 Main St | 3 employees
Jonson Inc | 456 Main St | 5 employees

但是,如果我的input.txt文件在要分隔的项目中包含(,),则会出现问题,例如:

input_bad.txt:

Stevenson Corp, 123 Main St, 3 employees\n
Johnson, Inc, 456 Main St, 5 employees\n #notice the comma before Inc

将导致错误的CSV列为:

Stevenson Corp | 123 Main St | 3 employees #3 columns 
Jonson | Inc | 456 Main St | 5 employees #4 columns (issue)

我想不出任何解决方案,以使Jonson,Inc保持不被“,”分隔符分开。

我的代码如下打开txt文件和csv:

inputfile = open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace")

csv_data = csv.reader(inputfile, delimiter = ",")

请帮助。

1 个答案:

答案 0 :(得分:0)

最好的方法是返回并将文件中的定界符从,更改为更明智的方法,但是如果这不是一种选择,那么您可以执行以下操作来解决此问题:

import csv
with open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace") as inputfile:
    spamreader = csv.reader(inputfile, delimiter='¬')
    for row in spamreader:
        new_row = row.rsplit(",", 2)
        print("|".join(new_row))

这使用了文本中未出现的delimer,因此不会拆分任何行(因此您可以使用inputfile.readlines()进行阅读),然后使用rsplit拆分最右边的两个逗号创建列