Python 写入多个.csv文件

Python 写入多个.csv文件,python,csv,operand,Python,Csv,Operand,我有一个字典,item\u dictionary[0]对应于data[0],而item\u dictionary[1]对应于data[1] item_dictionary = {'10350':'cat', '560':'dog'} names = item_dictionary.values() data = [[1, 2, 3, 4], [5, 6, 7]] 我试图将数据[0]和数据[1]中的项目写入不同的.csv文件,如下所示: def writer(item): q = da

我有一个字典,
item\u dictionary[0]
对应于
data[0]
,而
item\u dictionary[1]
对应于
data[1]

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

data = [[1, 2, 3, 4], [5, 6, 7]]
我试图将
数据[0]
数据[1]
中的项目写入不同的.csv文件,如下所示:

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行,在writer中
TypeError:不支持%:“file”和“str”的操作数类型

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

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

在前一种情况下,您正在打开一个名为“%r.csv”的文件,以便以二进制模式写入,然后尝试使用
名称[q]
的内容对文件对象进行模块化<代码>文件对象不支持模运算符,因此您会得到
类型错误

在后一种情况下,我们使用模块运算符调用字符串
%r.csv
格式
方法,生成一个字符串,该字符串被传递给
打开
函数


作为一个旁白,你可能想考虑把名字和数据联系起来的另一种方法——你可以把数据和名字一起存储在元组、字典或类实例中:

# 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
open('%r.csv','wb')%names[q]
应该是
open('%r.csv'%names[q],'wb')

在前一种情况下,您正在打开一个名为“%r.csv”的文件,以便以二进制模式写入,然后尝试使用
名称[q]
的内容对文件对象进行模块化<代码>文件对象不支持模运算符,因此您会得到
类型错误

在后一种情况下,我们使用模块运算符调用字符串
%r.csv
格式
方法,生成一个字符串,该字符串被传递给
打开
函数


作为一个旁白,你可能想考虑把名字和数据联系起来的另一种方法——你可以把数据和名字一起存储在元组、字典或类实例中:

# 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

警告:在Python中,字典是无序的,元素在
.values()
中的显示顺序是任意的。所以“条目字典[0]对应于数据[0],条目字典[1]对应于数据[1]”是不正确的——没有
条目字典[0]
。(试试看——你会得到一个KeyError。)有一个单独的有序字典类型,但这不是你正在使用的。谢谢你的提醒。警告:在Python中,字典是无序的,元素在
.values()
中的显示顺序是任意的。所以“条目字典[0]对应于数据[0],条目字典[1]对应于数据[1]”是不正确的——没有
条目字典[0]
。(试试看——你会得到一个键错误。)有一个单独的有序字典类型,但这不是你正在使用的。谢谢提醒。好的。这修复了一个问题,却暴露了我代码中的另一个缺陷。我现在得到
回溯(最近一次调用最后一次):文件“”,第1行,在文件“”中,第5行,在writer\u csv中。错误:应为序列
@user1709173-csv writer函数应为列表列表(或者至少有一个iterable要传递给它。当它尝试对数据中的行执行以下
操作时:对于行中的数据点:写入数据(数据点)
它发现自己试图在
int
上迭代并爆炸。(
对于[1,2,3,4]中的行:对于1中的数据点:#爆炸!(1不可迭代)
)因此,如果
data
是列表列表,我如何创建一个仅包含
data
中的一项而不是两项的csv?好的。我找到了答案。我刚刚制作了一个
data[q]
的邮政编码并编写了它。好的。这修复了一个问题,但暴露了我代码中的另一个缺陷。我现在得到
回溯(最近一次调用):文件“”在文件“”中的第1行,在writer\u csv中的第5行。错误:序列应为
@user1709173-csv writer函数要求向其传递一个列表列表(或至少一个iterable的iterable)。当它尝试对数据中的行执行以下操作时:对于数据中的点:写入数据(data\u point)它发现自己试图在
int
s上迭代并爆炸。(
对于[1,2,3,4]中的行:对于1中的数据点:#BOOM!(1不适用)
)因此,如果
data
是列表列表,我如何创建一个仅包含
data
中的一个项目而不是两个项目的csv?好的。我算出了。我只是制作了一个
data[q]
的邮政编码并编写了它。