使用Python字典进行表/数据操作

使用Python字典进行表/数据操作,python,csv,dictionary,key,Python,Csv,Dictionary,Key,我需要帮助完成这个python脚本。我在一家公司实习,这是我的第一周。我被要求开发一个python脚本,该脚本将采用.csv并将任何相关列附加到一个列中,以便它们只有15个左右包含数据的必要列。例如,如果有zip4、zip5或邮政编码列,则他们希望这些列都位于邮政编码列下面 本周我刚开始学习python,因为我正在做这个项目,所以请原谅我的noobish问题和词汇。我不是在找你们帮我做这件事。我只是想找些指导。事实上,我想学习更多关于python的知识,所以任何能带领我走向正确方向的人,请帮助我

我需要帮助完成这个python脚本。我在一家公司实习,这是我的第一周。我被要求开发一个python脚本,该脚本将采用.csv并将任何相关列附加到一个列中,以便它们只有15个左右包含数据的必要列。例如,如果有zip4、zip5或邮政编码列,则他们希望这些列都位于邮政编码列下面

本周我刚开始学习python,因为我正在做这个项目,所以请原谅我的noobish问题和词汇。我不是在找你们帮我做这件事。我只是想找些指导。事实上,我想学习更多关于python的知识,所以任何能带领我走向正确方向的人,请帮助我

我正在使用字典键和值。键是第一行中的每一列。每个键的值都是剩余的第二行到第三行。现在,我只得到一个键:值对。我只得到最后一行作为我的值数组,我只得到一个键。另外,我收到一条KeyError消息,因此我的密钥没有被正确识别。到目前为止,我的代码在下面。我会继续努力,非常感谢您的帮助!希望我能得到一个帮我喝啤酒的人的帮助,我能稍微挑出他们的想法:

谢谢你的时间

# To be able to read csv formated files, we will frist have to import the csv module
import csv

# cols = line.split(',')# each column is split by a comma
#read the file
CSVreader = csv.reader(open('N:/Individual Files/Jerry/2013 customer list qc, cr, db, gb 9-19-2013_JerrysMessingWithVersion.csv', 'rb'), delimiter=',', quotechar='"')

# define open dictionary
SLSDictionary={}# no empty dictionary. Need column names to compare to. 


i=0
#top row are your keys. All other rows are your values

#adjust loop
for row in CSVreader:
# mulitple loops needed here
    if i == 0:
            key = row[i]
    else:
            [values] = [row[1:]]
            SLSDictionary = dict({key: [values]}) # Dictionary is keys and array of values
    i=i+1


#print Dictionary to check errors and make sure dictionary is filled with keys and values        
print SLSDictionary

# SLSDictionary has key of zip/phone plus any characters
#SLSDictionary.has_key('zip.+')
SLSDictionary.has_key('phone.+')

#value of key are set equal to x. Values of that column set equal to x
#[x]=value

#IF SLSDictionary has the key of zip plus any characters, move values to zip key
#if true:   
#        SLSDictionary['zip'].append([x])
    #SLSDictionary['phone_home'].append([value]) # I need to append the values of the specific column, not all columns
    #move key's values  to correct, corresponding key
SLSDictionary['phone_home'].append(SLSDictionary[has_key('phone.+')])#Append the values of the key/column 'phone plus characters' to phone_home key/column in SLSDictionary
#if false:
#        print ''
    # go to next key

SLSDictionary.has_value('')

if true:
    print 'Error: No data in column'

# if there's no data in rows 1-?. Delete column
#if value <= 0:
#        del column

print SLSDictionary 

快速查看时发现了几个错误。您需要注意的一件事是,您每次都在为现有字典分配一个新值:

SLSDictionary = dict({key: [values]})
每次SLSDictionary进入该循环时,您都将为其分配一个新值。因此,在最后,您只有最底部的条目。要向词典添加关键字,请执行以下操作:

SLSDictionary[key] = values
此外,您不需要这一行中的括号:

[values] = [row[1:]]
而应该是:

values = row[1:]
但最重要的是,你将永远只有一把钥匙,因为你不断增加你的i值。所以它只有一把钥匙,所有的东西都会一直分配给它。如果没有CSV外观的示例,我无法指导您如何重新构造循环,以便它捕获所有关键点

假设您的CSV如下所述:

Col1, Col2, Col3, Col4
Val1, Val2, Val3, Val4
Val11, Val22, Val33, Val44
Val111, Val222, Val333, Val444
那么你可能想要这样的东西:

dummy = [["col1", "col2", "col3", "col4"],
         ["val1", "val2", "val3", "val4"],
         ["val11", "val22", "val33", "val44"],
         ["val111", "val222", "val333", "val444"]]

column_index = []
SLSDictionary = {}

for each in dummy[0]:
    column_index.append(each)
    SLSDictionary[each] = []

for each in dummy[1:]:
    for i, every in enumerate(each):
        try:
            if column_index[i] in SLSDictionary.keys():
                SLSDictionary[column_index[i]].append(every)
        except:
            pass

print SLSDictionary
这就产生了

{'col4': ['val4', 'val44', 'val444'], 'col2': ['val2', 'val22', 'val222'], 'col3': ['val3', 'val33', 'val333'], 'col1': ['val1', 'val11', 'val111']}

如果您想让它们保持有序,请将字典类型更改为OrderedDict

是否有理由不使用csv.DictReader?我应该使用csv.DictReader而不是csv.reader吗?非常感谢您提供的信息!你是个救生员。我想知道是什么错误使我只得到for循环中的最后一个结果。有没有办法将整个CSV导入虚拟字段?我正在尝试编译代码并测试它是否有效,但是我家用笔记本电脑上的文本编辑器不如我工作桌面上的文本编辑器好,所以一旦我能够测试脚本,我会让你知道它是如何工作的。再次感谢所有的建议!CSVreader本质上应该给出与虚拟字段相同的结果。我只是以它为例。