0

単純に見えるこの問題に苦労していますが、行き詰まっています! さて、次のようなカテゴリのリストを受け取る関数を作成する必要があります。

input Example1: ['point_of_interest', 'natural_feature', 'park', 'establishment']
input Example2: ['point_of_interest', 'establishment']
input Example3: ['sublocality', 'political']

そのリストは内部に可変要素を持つ可能性があるので、1から4まではそれ以上ではないと思います

したがって、この同じデータを使用して、その入力を使用してファイルを作成し、新しい入力がファイルにない場合はファイルに追加します

各リストは要素そのものです。つまり、リストの要素全体を比較する必要があり、他のリストがまったく同じであることがわかった場合は、追加する必要はありません。

私のコードでは、次のリストと比較するために完全なリストを追加する方法が本当にわからないため、ファイルに最初の要素を追加しようとしました。

def categories(category):
    number = 0
    repeat = False
    if os.path.exists("routes/svm/categories"):
        with open('routes/svm/categories', 'rb') as csvfile:
            spamreader = csv.reader(csvfile)
            for categoryFile in spamreader:
                if (cmp(categoryFile,category) == 0):
                    number += 1
                    repeat = True
                if not repeat:
                    categoriesFile = open('routes/svm/categories', 'a') 
                    category = str(category[0])     
                    categoriesFile.write(category) 
                    categoriesFile.write('\n')
                    categoriesFile.close()
                else:
                    categoriesFile = open('routes/svm/categories', 'w')
                    category = str(category[0])     
                    categoriesFile.write(category)
                    categoriesFile.write('\n')
                    categoriesFile.close()      

編集: @KlausWarzecha によるいくつかの説明: ユーザーは (約 4) 項目のリストを入力する場合があります。このリスト (= このアイテムの組み合わせ) がファイルにまだない場合、リスト (アイテムを個別にではなく!) をファイルに追加しますか? –</p>

4

1 に答える 1

0

問題は本当に簡単です。うまくいく場合は、次のアプローチを取ることができます。

  1. CSV のすべての内容をリストに読み込む
  2. 入力から一致しないすべての項目をこのリストに追加します
  3. CSVファイルを書き換える

次のサンプル コードから始めることができます。

# input_list here represents the inputs
# You may get input from some other source too
input_list = [['point_of_interest', 'natural_feature', 'park', 'establishment'], ['point_of_interest', 'establishment'], ['sublocality', 'political']]
category_list = []
with open('routes/svm/categories', 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for categoryFile in spamreader:
        print categoryFile
        category_list.append(categoryFile)
for item in input_list:
    if (item in category_list):
        print "Found"
    else:
        category_list.append(item)
        print "Not Found"

# Write `category_list` to the CSV file

このコードは、コピー アンド ペースト ソリューションとしてではなく、出発点として使用してください。

于 2013-06-17T11:52:29.283 に答える