0

我有一本字典,item_dictionary[0]对应于data[0]item_dictionary[1]对应于data[1]

item_dictionary = {'10350':'cat', '560':'dog'}
names = item_dictionary.values()

data = [[1, 2, 3, 4], [5, 6, 7]]

我尝试将项目写入不同的 .csv 文件,如下所示data[0]data[1]

def writer(item):
    q = data.index(item)    
    myfile = open('%r.csv', 'wb') % names[q]
    wr = csv.writer(myfile)
    wr.writerows(data[q])
    myfile.close()

z = [writer(x) for x in data]

这将返回错误:

回溯(最后一次调用):
文件“”,第 1 行,在
文件“”中,第 3 行,写入
器类型错误:不支持的操作数类型用于 %:'file' 和 'str'`。

我对'str'部分错误的猜测是names[q]返回,比如说,'cat'而不是cat. 但是,我不知道要使用什么操作数类型,也不知道如何解决这个str问题,所以有人可以帮我吗?谢谢。

4

1 回答 1

3

open('%r.csv', 'wb') % names[q]应该是open('%r.csv' % names[q], 'wb')

在前一种情况下,您打开一个名为“%r.csv”的文件以二进制模式写入,然后尝试使用names[q]. file对象不支持模运算符,因此您得到TypeError.

在后一种情况下,我们使用模块运算符调用format字符串的方法,%r.csv从而生成一个传递给open函数的字符串。


顺便说一句,您可能需要考虑另一种将名称与数据关联的方式 - 您可以将名称与数据一起存储在元组、字典或类实例中:

# Tuples
data = [("cat", [1, 2, 3, 4]), ("dog", [5, 6, 7])]
for name, file_data in data:
    print name, "=>", file_data

# Dictionary (assumes only one instance of name per data point)
data = {"cat": [1, 2, 3, 4], "dog": [5, 6, 7]}
for name, file_data in data.items():
    print name, "=>", file_data

# Class instances (ignore this one if you haven't done any OO before)
# (You don't need it if you don't *know* you need it).
class MyDataType(object):
    def __init__(self, name, data):
        self.name = name
        self.data = data

data = [MyDataType("cat", [1, 2, 3, 4]), MyDataType("dog", [5, 6, 7])]
for data_point in data:
    print data_point.name, "=>", data_point.data
于 2012-11-04T01:43:38.877 回答