2013-06-17 3 views
0

Я борюсь с этой проблемой, которая выглядит просто, но я застрял! Ну, я должен построить функцию, где я получаю список категорий, такие как:Python: Сравнить список со списком в файле

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()  

EDIT: Некоторые пояснения по @KlausWarzecha: Пользователи могли бы войти в список с (около 4) пунктов. Если этот список (= эта комбинация элементов) уже не находится в файле, вы хотите добавить в файл список (а не элементы отдельно!)? -

+0

Почему вы не можете просто написать все элементы по одному в файл? Твой вопрос трудно понять для меня –

+0

@MichaelButscher я получил список в своих функциях, мне нужно сравнить со списком, который у меня есть в файле, этот новый список отсутствует в файле, который я должен добавить, в основном это проблема. извините за мой английский – taonico

+0

Ваш вопрос очень трудно понять. – Dropout

ответ

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 

Используйте этот код в качестве отправной точки, а не как решение для копирования-вставки.

+0

@theghosfc его как только список входных данных - это список, а не список списка – taonico

+0

@taonico, вход - это просто список. Итак, приведенный выше пример показывает 3 разных входа в 3 разных прогона программы? Кроме того, как хранятся данные в файле CSV. Только один столбец или несколько?Можете ли вы поделиться 2-3 примерами записей из файла CSV для лучшего понимания? –

Смежные вопросы