解析CSV文件,并将其写入另一种CSV格式

时间:2011-12-26 20:11:01

标签: python csv

使用urllib2获取并导入文件夹的导入CSV的格式如下:

number,season,episode,production code,airdate,title,special?,tvrage
1,1,1,"101",24/Sep/07,"Pilot",n,"http://www.tvrage.com/Chuck/episodes/579282"

现在我成功地将其转换为SQL语句以及可以插入到我的数据库中的另一个CSV文件。进入这样的格式:

,1,1,1,"Pilot",'2006-10-11',,,,,1,2011-12-23 15:52:49,2011-12-23 15:52:49,1,1

使用以下代码

csv = """,%s,%s,%s,%s,%r,,,,,1,2011-12-23 15:52:49,2011-12-23 15:52:49,1,1""" % (showid, line[1],line[2], line[5], date(line[4]))
    print>>final, csv

编辑 -

我已从字符串格式更改为:

csv = ','+showid+','+line[1]+','+line[2]+','+line[5]+','+date(line[4])+',,,,,1,2011-12-23 15:52:49,2011-12-23 15:52:49,1,1'

它不是更好,我仍然遇到麻烦,在解析时跳过了一些文件。不确定它是我还是CSV模块。

问题是它完全可以通过一些文件。它只是跳过一些CSV文件,对于一些我只是得到像IndexError这样的错误:列表索引超出范围

如果有人有CSV文件的经验并让他们正确解析,我真的很感激帮助。

这是完整的源代码: http://cl.ly/2W472g303D1p0J3S2o46

dsimport.py - http://pastie.org/3076663 CSVFileHandler.py - http://pastie.org/3076667

由于

2 个答案:

答案 0 :(得分:1)

我不确定究竟是什么错误,但这里有一些提示:

  1. processFile(line),line有点坏名字,因为它不是字符串行,它是row或元素列表。这就是蒂姆和我一见钟情的原因。
  2. 您应该验证line至少有6个元素,如脚本所需。
  3. 您可以使用真棒的join方法。
  4. 这是一个小型重构:

    def processFile(row):
        if len(row) < 6:
            #raise Exception('too few columns')
            # maybe it's better to just ignore bad rows in your case
            return
        items = [
            '',
            showid,
            row[1],
            row[2],
            row[5],
            date(row[4]),
            ]
        res = ','.join(items)
        res += ',,,,,1,2011-12-23 15:52:49,2011-12-23 15:52:49,1,1'
        print res
        print>>final, res
    
    handler = CSVFileHandler('/Users/tharshan/WebRoot/stv/export/csv/%s-save.csv' % name)
    try:
        handler.process(processFile, name)    
    except Exception, e:
        print 'Failed processing and skipping %s because of: %s' % (name, e)
    
    final.close()
    

答案 1 :(得分:0)

没关系所有固定的。最后我只使用了excel方言,并用管线输出了csv。无论哪种方式,这都是非常繁琐和诚实地感觉我真的很幸运。

感谢您的帮助。