2016-12-01 4 views
0

Мне нужно найти и изменить значение в файле склада CSV. Я знаю, как искать значение, но когда я пытаюсь использовать csv.writer, он возвращает ошибку.Как вы изменяете значение в CSV-файле через python?

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 быть переименовано в старую версию (убедитесь, что у вас есть резервная копия)
  • Rename New Stock Levels.csv в Stock Levels.csv

Я не думаю, что вы можете изменить файл непосредственно, я думаю, что вы всегда должны читать, изменять, написать для временного файла и затем переименовать.

+0

Если файл очень большой, вы также можете скопировать его в файл temp по одной строке за раз. –

+0

Я думаю, что все работает нормально до тех пор, пока не попытается переименовать новый файл. Он возвращает ошибку, что он не может создать файл, если этот файл уже существует. – TheOneWhoLikesToKnow

+0

Какая ошибка? какая у вас операционная система? – Matthias

Смежные вопросы