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行目、ライター
TypeError:サポートされていないオペランドタイプ(%:'ファイル'および'str'`)。

'str'エラーの一部についての私の推測は、たとえば、の代わりにnames[q]戻るということです。ただし、代わりに使用するオペランドタイプがわからず、問題を回避する方法もわからないので、誰かが私を助けてくれませんか?ありがとう。'cat'catstr

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 に答える