如何通过python更改CSV文件中的值?
我需要能够找到并更改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
试试这个:
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.csv
到Stock Levels.csv
我不认为你可以直接修改一个文件,我想你总是要读,修改,写临时文件,然后重命名。
如果文件非常大,您也可以一次将其复制到临时文件一行。 –
我认为它一切正常,直到它试图重新命名新文件。它返回一个错误,即该文件已存在时无法创建文件。 – TheOneWhoLikesToKnow
什么是错误?你的操作系统是什么? – Matthias
如果我的问题有任何问题,请告诉我。 – TheOneWhoLikesToKnow
我不明白你尝试在*行中作者*行迭代。当然,它不能是你刚刚打开的空CSV文件,它不应该是某种输入? – guidot
代码的这部分用于搜索正确的行 – TheOneWhoLikesToKnow