python:根据前一行连续更改变量

时间:2015-06-24 03:48:10

标签: python variables csv for-loop

所以我有一个代码可以读取这个cvs文件,' test.cvs'。脚本的目的是知道什么时候它是五个包,GK-05或GK-01,并像这样添加颜色," ' 499',' GK-05','黑色,银色,橙色,黑色,蓝色' &#34 ;.脚本根据order_number读取每一行,如果当前行的order_number为空,则将颜色添加到先前的顺序。 Sku代表包装类型。请注意,在完成cvs中,每个三个字段应该用撇号括起来。

order_number,sku,options
500,GK-01,black
499,GK-05,black
,,silver
,,orange
,,black
,,blue

最终结果应为:

order_number,sku,options
'500','GK-01','black'
'499','GK-05', 'black, silver, orange, black, blue'

请注意,在完成cvs中,每个三个字段都应该用撇号括起来。

到目前为止,我的代码是:

with open(input_filename, 'r') as input_csv, open(output_filename, 'w',     newline = '') as output_csv:
    reading = csv.reader(input_csv)
    writing = csv.writer(output_csv)

    next(reading)
    previous_row = next(reading)
    for row in reading:
    if row[0] == '' and row[2] == previous_row[2]:
            print ("current: " + previous_row[0])
            print ("This one matches " + row[2])
        else:
            previous_row = row

我的问题是previous_row赢了' 499,GK-05,黑'。它将始终是下一行,因此不会打印出任何内容。如果我删除了else条件,那么打印将是:

current: 500
This one matches black

我希望它是499.我在尝试下一部分之前尝试解决第一个基于前一行更改变量的问题。但是,如果有人可以帮助将所有颜色添加到一起的下一部分,那将非常感激。

感谢您的帮助。

**编辑 Anand S Kumar的答案给了我很多帮助,但还没有解决把这个领域封闭起来的问题。

2 个答案:

答案 0 :(得分:0)

假设您的代码中的缩进问题不是实际问题,那么您的问题就出现了,因为如果当前行的第一个元素为空,您永远不会将row[2]从当前行追加到previous_row,您需要另一个elif这样的条件并附加当前行(或如果)。

另外根据您的逻辑,您甚至不需要第一个if条件,这会阻止第5行中的black进入输出。

代码是 -

>>> with open('test.csv','r') as input_csv, open('output.csv','w',newline='') as output_csv:
...     reading = csv.reader(input_csv)
...     writing = csv.writer(output_csv)
...     data = [next(reading)]
...     previous_row = next(reading)
...     for row in reading:
...             if row[0] == '':
...                     previous_row.append(row[2])
...             else:
...                     previous_row = ["'{}'".format(previous_row[0]), "'{}'".format(previous_row[1]),"'{}'".format(', '.join(previous_row[2:]))]
...                     data.append(previous_row)
...                     previous_row = row
...     previous_row = ["'{}'".format(previous_row[0]), "'{}'".format(previous_row[1]),"'{}'".format(', '.join(previous_row[2:]))]
...     data.append(previous_row)
...     writing.writerows(data)

答案 1 :(得分:0)

with open(input_filename, 'r') as input_csv, open(output_filename, 'w', newline = '') as output_csv:
    reading = csv.reader(input_csv)
    writing = csv.writer(output_csv)

    next(reading)
    for row in reading:
        if row[0] == '':
            print ("This one matches " + row[2])
        else:
            print ("current: " + row[0])
            print ("This one matches " + row[2])