CSV代码不循环

时间:2014-12-09 11:27:20

标签: python csv for-loop

我正在尝试创建一个小的Python脚本来加速工作中的事情,并使一个小脚本工作,但它不能按我的意愿工作。这是当前的代码:

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. 中第一列的所有值
  3. 根据文件2
  4. 中第2列中的值检查此值
  5. 如果找到匹配项,(一旦我有这个工作,我希望它也能找到部分匹配)将行复制到文件3
  6. 如果没有移到skusToCheck中的下一个值并重复
  7. 我似乎无法让第33 - 40行循环播放。它会检查第一个值并在第二个文件中找到匹配项,但不会移到skusToCheck的下一个值。

1 个答案:

答案 0 :(得分:0)

您需要按照jonrsharpe的第一条评论提示,即将您的while循环修改为

# 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

中的所有行匹配