2010-06-08 127 views
2

我有多个CSV文件,需要在循环中解析以收集信息。 问题是虽然它们是相同的格式,但有些由'\ t'分隔,而另一些则由','分隔。 之后,我想删除字符串周围的双引号。Python:使用多分割分隔符分割文件

python可以通过多个可能的分隔符分割吗?

在一分钟,我可以通过使用一个分割线:

f = open(filename, "r") 
fields = f.readlines() 
for fs in fields: 
    sf = fs.split('\t') 
    tf = [fi.strip ('"') for fi in sf] 

任何建议都欢迎。

sf = re.split(r'[,\t]', fs) 

这并不占例如:

+0

可能重复([正则表达式的Python通过两个分隔符中的一个分割的字符串] http://stackoverflow.com/questions/618551/python-regex-split-a-string-by-one-of-两个分隔符) – danben 2010-06-08 16:43:04

+2

请不要将其作为重复关闭:正如我在我的回答中所说的,手动分割在这里是错误的解决方案,所以其他问题不会有帮助。 – interjay 2010-06-08 16:55:31

回答

14

像这样拆分文件并不是一个好主意:如果其中一个字段中有逗号,它将会失败。例如(对于制表符分隔的文件):行"field1"\t"Hello, world"\t"field3"将被分成4个字段而不是3个。

相反,您应该使用csv模块。它包含有帮助的Sniffer类,它可以检测文件中使用了哪些分隔符。 csv模块也会为您删除双引号。

import csv 

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

for line in reader: 
    #process line 
+0

+1在python中,你通常会找到一些工具来帮助你解决问题,只要你使用一些熟悉的格式。从许多重复发明的尝试中学到的教训:) – daramarak 2010-06-08 17:36:36

+0

1024是指什么? – user809695 2013-08-23 20:22:39

+0

@ user809695它意味着根据文件的前1024个字节确定格式。它可以是任何其他数字,它只需要足够大以包含足够的数据来确定格式。 – interjay 2013-08-23 23:03:23

2

你可以用正则表达式(可选编译)做到这一点以制表符分隔的字段中的逗号。我会看看csv模块是否有用。