2016-12-01 96 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

相关问题