如何在Python中将制表符分隔,管道分隔为CSV文件格式

4 python csv

我有一个文本文件(.txt),可以是制表符分隔格式或管道分隔格式,我需要将其转换为CSV文件格式.我正在使用python 2.6.任何人都可以建议我如何识别文本文件中的分隔符,读取数据然后将其转换为逗号分隔文件.

提前致谢

小智 6

我担心你不知道它是什么就无法识别分隔符.CSV的问题在于引用ESR:

Microsoft的CSV版本是如何不设计文本文件格式的教科书示例.

如果分隔符可以出现在字段中,则需要以某种方式对其进行转义.在不知道如何完成转义的情况下,自动识别它很困难.可以使用UNIX方式进行转义,使用反斜杠'\'或Microsoft方式,使用引号,然后必须转义.这不是一项微不足道的任务.

因此,我的建议是从生成您要转换的文件的人那里获取完整的文档.然后,您可以使用其他答案或某些变体中建议的方法之一.

编辑:

Python提供的csv.Sniffer可以帮助您推断DSV的格式.如果您的输入如下所示(请注意第二行第一个字段中的引用分隔符):

a|b|c
"a|b"|c|d
foo|"bar|baz"|qux
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

import csv

csvfile = open("csvfile.csv")
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)

reader = csv.DictReader(csvfile, dialect=dialect)
for row in reader:
    print row,
# => {'a': 'a|b', 'c': 'd', 'b': 'c'} {'a': 'foo', 'c': 'qux', 'b': 'bar|baz'}
# write records using other dialect
Run Code Online (Sandbox Code Playgroud)

  • 如果制表符或管道是字段内容的一部分,会发生什么?您必须知道如何转义分隔符来处理此问题.仅仅在分隔符上分割线是不够的. (2认同)