擅长:python、mysql、java
<p>如果我能正确推断您的意图,您需要替换这行:</p>
<pre><code>self[firstLine[i]] = line[i]
</code></pre>
<p>有了这个:</p>
^{pr2}$
<p>这将为您的<code>newClass</code>对象创建一个以数据中的列命名的属性。在</p>
<p>例如:</p>
<pre><code>Name, Date, Weight
Joe, 23-Sep, 99
...
</code></pre>
<p>以及</p>
<pre><code>data = classMaker('file.csv')
</code></pre>
<p>将产生:</p>
<pre><code>data[0].Name == 'Joe'
</code></pre>
<p>另外,假设您将添加文件I/O、解析CSV文件和其他缺少的元素。在</p>
<p>p.p.s:您可以完全避免循环计数器<code>i</code>:</p>
<pre><code>for attr, val in zip(firstLine, line):
setattr(self, attr, val)
</code></pre>
<p>p.p.s:这是一个完整的工作样本:</p>
<pre><code>import csv
def classMaker(filename):
class newClass(object):
def __init__(self, line):
for attr, val in zip(firstLine, line):
setattr(self, attr, val)
with open(filename, 'rb') as csvfile:
spamreader = csv.reader(csvfile)
firstLine = spamreader.next()
return [newClass(line) for line in spamreader]
x = classMaker("/tmp/x.csv")
print x[0].Name
</code></pre>