如何在CSV解析器python中获取具有值的列

时间:2015-07-16 10:57:32

标签: python django

CSV解析器中的另一个问题。 我需要将年份及其相应的国家/地区填充到sqlite数据库中的表中。我已成功缩小它以获取所有行的值,如果它们中的任何一个具有值。但是尝试将数据保存()到数据库,它会为那些没有任何价值的人抛出ValueError: invalid literal for int() with base 10: ''

if (row[12] or row[13] or row[14] or row[15] ) != "":
                    country1 = re.match(r'.*\((\w+)\)', header[12])
                    country2 = re.match(r'.*\((\w+)\)', header[13])
                    country3 = re.match(r'.*\((\w+)\)', header[14])
                    country4 = re.match(r'.*\((\w+)\)', header[15])
                    Yr.country = country1 
                    Yr.country = country2 
                    Yr.country = country3 
                    Yr.country = country4 
                    Yr.mol = MoleculeDictionary.objects.get(id=row[0])
                    Yr.year = row[12]
                    Yr.year = row[13]
                    Yr.year = row[14]
                    Yr.year = row[15]
                    #Yr.save()
                    print country1.group(1), row[12], country2.group(1), row[13], country3.group(1), row[14], country4.group(1), row[15]




Year (US),Year (Eur),Year (Jap), Yea(CHI),
    ,,,,,
    ,,,,,
    ,,,,,
    ,,2009,,,
    ,,1977,,,
    ,1982,1983,,,

打印声明

US  Eur 2009 Jap  CHI 
US  Eur 1977 Jap  CHI 
US 1982 Eur 1983 Jap  CHI 

但我更愿意只获得每行中带有值的列。我应该如何得到2009欧元,1977欧元,1982年美元,1983欧元。请忽略我的无能,因为我不熟悉python和Django。感谢您提前提出的所有建议。

感谢。

1 个答案:

答案 0 :(得分:0)

我不知道你的意思

  

宁愿只获得每行中包含值的列

所以也许您可以指定所需的输出?

但是,鉴于您的csv为test.csv,此脚本

import csv

with open('test.csv') as myfile:
    reader = csv.reader(myfile)
    header = []
    for row in reader:
        if header == []: # first row
            header = row
        else:
            for i in range(len(row)):
                if row[i] != '':
                    # calculate custom header
                    custom_header = header[i].split('(')[1].split(')')[0].upper()
                    print custom_header, row[i]

将打印

JAP 2009
JAP 1977
EUR 1982
JAP 1983

这是你想要的吗?