2016-12-01 99 views
0

我需要能夠找到並更改CSV股票文件中的值。我知道如何搜索一個值,但是當我嘗試使用csv.writer時,它會返回一個錯誤。如何通過python更改CSV文件中的值?

Traceback (most recent call last): 
    File "\\pbsrvfile\ExamAccounts$\ITCA76\ochot_krystian_a453\Task 3\Task 3.pyw", line 8, in <module> 
    for row in writer: 
TypeError: '_csv.writer' object is not iterable 

我不知道它爲什麼這樣做。到目前爲止,我有這樣的代碼:

import csv 
code=input('Enter code to search: ') 
stock=open ('Stock Levels.csv', 'wb') 
writer=csv.writer(stock) 
for row in writer: 
    for field in row: 
     if field==code: 
      print('Record found! \n') 
      print('Code: '+row[0]) 
      print('Product name: '+row[1]) 
      print('Target level: '+row[2]) 
      target = int(row[2]) 
      print('Current level: '+row[3]+'\n') 
      current = int(row[3]) 
      restock_amount = target - current 
      restocked_value = restock_amount + current 
      writer.writerow[3](restocked_value) 
      print(row[1]+' has been restocked to '+restocked_value) 

誰能告訴我如何修正這個錯誤,或者,如果有另一種方式來修改這個值。我使用Python 3.2.3

+0

如果我的問題有任何問題,請告訴我。 – TheOneWhoLikesToKnow

+1

我不明白你嘗試在*行中作者*行迭代。當然,它不能是你剛剛打開的空CSV文件,它不應該是某種輸入? – guidot

+0

代碼的這部分用於搜索正確的行 – TheOneWhoLikesToKnow

回答

2

試試這個:

import csv 
import os 
code=input('Enter code to search: ') 
with open ('Stock Levels.csv', 'r') as stock: 
    reader=csv.reader(stock, delimiter=',') 

    with open ('New Stock Levels.csv', 'w') as newStock: 
     writer=csv.writer(newStock, delimiter=',') 
     for row in reader: 
      if code in row: 
       print('Record found! \n') 
       print('Code: '+row[0]) 
       print('Product name: '+row[1]) 
       print('Target level: '+row[2]) 
       target = int(row[2]) 
       print('Current level: '+row[3]+'\n') 
       current = int(row[3]) 
       restock_amount = target - current 
       restocked_value = restock_amount + current 
       row[3] = restocked_value 
       print(row[1]+' has been restocked to '+str(restocked_value)) 
      writer.writerow(row) 
os.remove('Stock Levels.csv') 
os.rename('New Stock Levels.csv', 'Stock Levels.csv') 

如果您使用的with open代替open你不必關閉文件。

的代碼是這樣的:

  • 讀的庫存水平(您可能需要更改的分隔符,你有什麼 )
  • 只看該庫存水平的每一行,並修改它,如果你看到 你的代碼搜索
  • 寫庫存水平的所有行回新股 水平,包括經修改的線
  • 刪除舊文件,以使New Stock Levels.csv文件是重命名爲舊版本(確保你有一個備份)
  • 重命名New Stock Levels.csvStock Levels.csv

我不認爲你可以直接修改一個文件,我想你總是要讀,修改,寫臨時文件,然後重命名。

+0

如果文件非常大,您也可以一次將其複製到臨時文件一行。 –

+0

我認爲它一切正常,直到它試圖重新命名新文件。它返回一個錯誤,即該文件已存在時無法創建文件。 – TheOneWhoLikesToKnow

+0

什麼是錯誤?你的操作系統是什麼? – Matthias

相關問題