CSV模块能解析多字符分隔符的文件吗?

7 投票
2 回答
1688 浏览
提问于 2025-04-16 23:17

我有一个“CSV”文件,它使用了多个字符作为分隔符,所以里面的数据看起来像这样:

field1_|#|_field2_|#|_field3_|#|_field4

有没有办法用Python的CSV模块来解析这个文件呢?

2 个回答

1

Python的csv模块不能处理超过一个字符的分隔符,所以对于“Python的CSV模块能解析带有多列分隔符的文件吗?”这个问题,简单的回答就是“不可以”。一个简单的测试证实了这一点:

reader = csv.reader(open('test.csv'), delimiter = '|#|')

结果出现了这个错误:

TypeError: "delimiter" 必须是一个字符的字符串

(test.csv是一个有两行的文件,分隔符如代码所示。)

所以你要么需要把分隔符换成单个字符的分隔符,就像@alexblum建议的那样,要么自己写一个解析器,或者找一个不同的解析器。用谷歌搜索“python csv 多字符分隔符”可以找到一些相关的内容。

6

试着把多个字符的分隔符换成一个字符的分隔符。

可以这样做:

class DelimitedFile:
  def __init__(self, fname, mode='rb', ind=',', outd=','):
    self.f = open(fname, mode)
    self.ind = ind
    self.outd = outd

  def __iter__(self):
    return self

  def next(self):
    line = self.f.next()
    return line.replace(self.ind, self.outd)

使用方法如下:

import csv

delimiter = ','

reader = csv.reader(DelimitedFile(fileName, ind='_|#|_', outd=delimiter))

for row in reader:
  print row

撰写回答