从CSV到Python词典的所有列名?

| 我仍然对使用python从头开始编程还很陌生,因此尽管我要使用SQL处理一个文件,然后尝试使用Python复制功能,但还是一个练习。看来我想获取我的(压缩,zip)csv文件并为其创建一个Dict(或者也许是dict的dict?)。当我使用字典阅读器时,我将第一行作为键,而不是将每一列作为自己的键?例如。
import csv, sys, zipfile
sys.argv[0] = \"/home/tom/Documents/REdata/AllListing1RES.zip\"
zip_file    = zipfile.ZipFile(sys.argv[0])
items_file  = zip_file.open(\'AllListing1RES.txt\', \'rU\')

for row in csv.DictReader(items_file,dialect=\'excel\'):
    pass
产量:
>>> for key in row:
        print \'key=%s, value=%s\' % (key, row[key])

key=MLS_ACCT    PARCEL_ID   AREA    COUNTY  STREET_NUM  STREET_NAME CITY        ZIP STATUS  PROP_TYPE   LIST_PRICE  LIST_DATE   DOM DATE_MODIFIED   BATHS_HALF  BATHS_FULL  BEDROOMS    ACREAGE YEAR_BUILT  YEAR_BUILT_DESC OWNER_NAME  SOLD_DATE   WITHDRAWN_DATE  STATUS_DATE SUBDIVISION PENDING_DATE    SOLD_PRICE,  
value=492859    28-15-3-009-001.0000    200 JEFF    3828    ORLEANS RD  MOUNTAIN BROOK  35243   A   SFR 324900  3/3/2011    2   3/4/2011 12:04:11 AM    0   2   3   0   1968    EXIST   SPARKS          3/3/2011 11:54:56 PM    KNOLLWOOD
所以我要寻找的是一列用于
MLS_ACCT
的列,以及一个单独的用于
PARCEL_ID
的列,依此类推,这样我就可以对诸如
SUBDIVISION
字段中包含
KNOLLWOOD
的所有商品的平均价格进行处理,并按日期范围,销售日期进一步细分等等 我知道如何使用SQL进行操作,但是正如我所说的,我想在这里获得一些Python技能。 我已经阅读了最近的几天,但是还没有找到关于这种用例的任何非常简单的插图。指向上述文档的指针将不胜感激。我意识到我可以使用驻留在内存中的SQL-lite,但是我的愿望仍然是学习Python方法。专注于仅以数字作为元素的数组,我需要做很多字符串匹配以及日期范围计算和比较。 最终,我将需要替换表中的值(因为我有不干净的数据),我现在要通过包含所有脏变量的“翻译表”并为最终使用提供“干净”的答案来执行此操作。     
已邀请:
您确定这是一个带有逗号分隔值的文件吗?这些行似乎由制表符分隔。 如果正确,请在“ 6”构造函数中指定制表符分隔符。
for row in csv.DictReader(items_file, dialect=\'excel\', delimiter=\'\\t\'):
    for key in row:
        print \'key=%s, value=%s\' % (key, row[key])
资料来源:http://docs.python.org/library/csv.html     
使用纯Python编写操作当然是可能的,但是您必须选择自己的算法。您上面发布的行输出看起来很像解析出错。实际上,它似乎根本不是CSV,是TSV吗?尝试将
delimiter=\'\\t\'
dialect=csv.excel_tab
传递给DictReader。 一旦正确地完成了读取,DictReader应该可以将行作为字典,这是一种典型的面向行的结构。奇怪的是,这通常不是处理像您这样的查询的有效方法。仅具有列列表使搜索变得容易得多。行方向意味着您必须为每行重做一些查找工作。诸如日期匹配之类的东西需要CSV中肯定不存在的数据,例如日期的表示方式和日期的列。 获取面向列的数据结构的示例(但是,涉及加载整个文件):
import csv
allrows=list(csv.reader(open(\'test.csv\')))
# Extract the first row as keys for a columns dictionary
columns=dict([(x[0],x[1:]) for x in zip(*allrows)])
列出和存储在变量中的中间步骤不是必需的。关键是使用zip(或其堂兄itertools.izip)来转置表格。 然后从所有行中按with12ѭ中的特定条件提取column11ѭ:
matchingrows=[rownum for (rownum,value) in enumerate(columns[\'one\']) if value>2]
print map(columns[\'two\'].__getitem__, matchingrows)
当您知道列的类型时,可以使用诸如datetime.datetime.strptime之类的适当函数来解析它。     
乍一看,您的输入似乎实际上不是CSV,但可能是制表符分隔的。在python.org上查看文档,您可以创建方言并使用它来更改定界符。
import csv
csv.register_dialect(\'exceltab\', delimiter=\'\\t\')
for row in csv.DictReader(items_file,dialect=\'exceltab\'):
    pass
    

要回复问题请先登录注册