【问题标题】:CSV code not loopingCSV 代码不循环
【发布时间】:2014-12-09 11:27:20
【问题描述】:

我正在尝试制作一个小型 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. 根据文件 2 中第 2 列中的值检查该值
  3. 如果找到匹配项,(一旦我有这个工作,我希望它也寻找部分匹配项)将行复制到文件 3
  4. 如果不移动到skusToCheck 中的下一个值并重复

我似乎无法让第 33 - 40 行循环。它将检查第一个值并在第二个文件中找到匹配项,但不会从skusToCheck 移动到下一个值。

【问题讨论】:

  • 您需要重置i = 0 while 循环内,或者最好使用for sku in skusToCheck:
  • 如果我在循环中重置它,它将如何跟踪它的位置?我使用 i 来跟踪程序在数组中的位置。
  • 您能否澄清一下 - 您是要对照每一行检查每个 SKU,还是只检查那些与文件中出现顺序相同的 SKU? “跟踪它在哪里” 是什么意思? (对不起,那应该是 for 循环。)
  • 我希望它查看来自 skusTocheck[i] 的第一个 sku(i 设置为 0,第一个条目),然后尝试将该 sku 与第二个文件中的任何匹配 sku 进行匹配。如果找到匹配项,则将该行复制到另一个文件,如果没有,则将 i 递增,以便查看 skusToCHeck 中的第二个条目。 i 变量跟踪数组中的哪个位置(变量?)以查找要搜索的值。
  • 这没有回答问题 - 您是否要针对每一行检查每个 SKU? 如果是这样,您需要回到 skusToCheck 的开头每个row in reader

标签: python csv for-loop


【解决方案1】:

您需要遵循 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 中的所有行匹配

【讨论】:

  • 您好,感谢您的回复。您提供的代码似乎仍然只适用于 skusToCheck 的第一项。需要检查的 sku 存储在 csv 的列中。这会影响代码吗?
  • 其实我是个菜鸟。代码在正确的轨道上。谢谢。
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多