2014-12-09 7 views
0

Я пытаюсь создать небольшой скрипт Python, чтобы ускорить работу на рабочем месте и иметь небольшой рабочий сценарий, но он не работает так, как я этого хочу. Вот текущий код:CSV code not looping

import re 
import csv 
#import pdb 

#pdb.set_trace() 

# Variables 
newStock = "newStock.csv" #csv file with list of new stock 
allActive = "allActive.csv" #csv file with list of all active 
skusToCheck= [] 
totalNewProducts = 0 
i = 0 

# Program Start - Open first csv 
a = open(newStock) 
csv_f = csv.reader(a) 

# Copy each row into array thingy 
for row in csv_f: 
     skusToCheck.append(row[0]) 

# Get length of array 
totalNewProducts = len(skusToCheck) 

# Open second csv 
b = open(allActive) 
csv_f = csv.reader(b) 

# Open blank csv file to write to 
csvWriter = csv.writer(open('writeToMe.csv', 'w'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) 

# Check first value in first row,first file against each entry in 2nd row in second file 
with open(allActive, 'rt') as b: 
     reader = csv.reader(b, delimiter=",") 
     for row in reader: 
       if skusToCheck[i] == row[1]: 
         print(skusToCheck[i]) # output to screen for debugging 
         print(row) # debugging 
         csvWriter.writerow(row) #write matching row to new file 
         i += 1 # increment where we are in the first file 

Псевдо код будет:

  1. Открыть файл один и сохранить все значения из столбца одной в skusToCheck
  2. Проверьте это значение от значений в столбце 2 в файле 2
  3. Если он найдет совпадение (как только у меня будет эта работа, я хочу, чтобы он тоже искал частичные совпадения), скопируйте строку в файл 3
  4. Если не перейти на следующее значение в skusToCheck и повторить

Кажется, я не могу получить линии 33 - 40 в петлю. Он проверит первое значение и найдет совпадение во втором файле, но не переместится на следующее значение с skusToCheck.

+0

Вам нужно сбросить 'i = 0' * внутри цикла while, или, лучше, используйте' для sku в skusToCheck: '. – jonrsharpe

+0

Если я сброшу его в цикле, как он будет отслеживать, где он? Я использую i для отслеживания, где в массиве находится программа. – Izz

+0

Не могли бы вы уточнить - хотите ли вы проверить каждый SKU на каждую строку или только те, которые отображаются в том же порядке, что и в файле? И что вы подразумеваете под * «отслеживать, где это» *? (Извините, это должно было прочитать цикл 'for'.) – jonrsharpe

ответ

0

Вы должны следовать за подсказку с первого комментария jonrsharpe, то есть модифицировать время цикла для

# Check first value in first row,first file against each entry in 2nd row in second file 
with open(allActive, 'rt') as b: 
    reader = csv.reader(b, delimiter=",") 
    for row in reader: 
    if len(row)>1: 
     for sku in skusToCheck: 
      if sku == row[1]: 
       print(sku) # output to screen for debugging 
       print(row) # debugging 
       csvWriter.writerow(row) #write matching row to new file 
       break 

Проверяется, если каждый отдельный sku является соответствие для всех строк в allActive

+0

Привет, спасибо за ответ. Код, который вы указали, по-прежнему работает только на первом элементе из skusToCheck. Скус, который нужно проверить, хранится в csv в columm. это может повлиять на код? – Izz

+0

На самом деле, я был noob. Код находится на правильном пути. Благодарю. – Izz