2017-01-31 5 views
1

я получил кусок CSV-файл со списком заказов, который выглядит следующим образом:Получение списка значений из CSV файла

CUSTOMER_CODE,CUSTOMER_NAME,NAME,PRODUCT 
1044, C1, Name1, Arduino, 
1044, C1, Name1, ESP8266, 
1048, C2, Name1, Arduino Uno, 
1042, C3, Name1, ESP32, 
1049, C4, Name1, Arduino Mega, 
1042, C3, Name1, Nexus 4, 

Теперь я просто хочу, чтобы извлечь список кодов клиентов [1042, 1044 ,1048 ,1049]

не

[1042, 1044 ,1044,1044,1044,1044,1044,1044,1048,1048,1048,1048,1048,1048,1048,1049 etc.]

#!/usr/bin/python 
import MySQLdb, csv 
CUSTOMER_CODES = [] 

with open('Customers.csv','r') as csvfile: 
    reader = csv.DictReader(csvfile) 

    for row in reader: 
     if len(CUSTOMER_CODES) == 0: 
      #adding 1st value 
      CUSTOMER_CODES.append(int(row['CUSTOMER_CODE'])) 
     for i in range(0,len(CUSTOMER_CODES)): 
      #check each value of table 
      print CUSTOMER_CODES 
      if CUSTOMER_CODES[i] == int(row['CUSTOMER_CODE']): 
       print "Code is already here "+ str(row['CUSTOMER_CODE']) 
      else: 
       CUSTOMER_CODES.append(int(row['CUSTOMER_CODE'])) 

И вместо того, имея выход так:

[1044, 1045, 1047....] 

У меня есть это:

[1044, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 

ответ

5

Просто использовать set вместо list:

#!/usr/bin/python 
import MySQLdb, csv 
CUSTOMER_CODES = set() 

with open('Customers.csv','r') as csvfile: 
    reader = csv.DictReader(csvfile) 

    for row in reader: 
     CUSTOMER_CODES.add(int(row['CUSTOMER_CODE'])) 

Или, используя набор понимания (предполагая, что Python 2.6 +):

#!/usr/bin/python 
import MySQLdb, csv 

with open('Customers.csv','r') as csvfile: 
    reader = csv.DictReader(csvfile) 
    CUSTOMER_CODES = {int(row['CUSTOMER_CODE']) for row in reader} 


Если вы хотите отсортированный список, добавьте CUSTOMER_CODES = sorted(CUSTOMER_CODES).

1

Другое решение с использованием pandas:

# Import your csv file into Dataframe 
df = pd.read_csv('yourfile.csv') 

# Extract the column you want and export to list 
a = df['CUSTOMER_CODE'].tolist() 

# Sort it 
a = a.sort() 

Это возвращает:

In [29]: a 
Out[29]: [1042, 1042, 1044, 1044, 1048, 1049] 

EDIT: для удаления дубликатов вы можете:

a = df['CUSTOMER_CODE'].drop_duplicates().tolist() 

, а затем сортировать.

+0

Это не удаляет удвоения. – MKesper

+0

Спасибо, отредактировал ответ. –

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