2015-06-24 30 views
0

所以我有一個讀取此cvs文件'test.cvs'的代碼。該腳本的目的是要知道它是什麼時候包裝五個,GK-05或GK-01,並像這樣添加顏色,「'499','GK-05','黑色,銀色,橙色,黑藍' 」。腳本根據order_number讀取每行,如果當前行的order_number爲空,則將顏色添加到以前的順序。 Sku代表包裝類型。請注意,在完成的CVS中,每三個字段都應該用撇號括起來。python:根據前一行在一行中更改變量

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,黑'。它將永遠是下一排,所以沒有任何東西會打印出來。如果我刪除了其他條件,然後打印將是:

current: 500 
This one matches black 

我希望它是499,我試圖解決不斷變化的基礎上以前的行之前,我想通了,接下來的部分變量,這個第一個問題。但是,如果任何人都可以幫助將所有顏色添加到一起的下一部分,那將非常感激。

謝謝你的幫助。

**編輯 Anand S Kumar的回答對我有很大的幫助,但是還沒有解決將字段封入''的問題。

+0

'GK-01'只有一個選擇,而'GK-05'有五個。我想知道是否有sku的規則。而'sku'獨一無二? – LittleQ

回答

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) 
+0

謝謝你!這適用於測試示例。我會嘗試與全尺寸。 –

+0

很高興爲你效勞。 –

+0

Anand,我將如何在三個字段周圍添加引號,如下所示:'499','GK-05','黑色,銀色,橙色,綠色,藍色' –

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]) 
相關問題