2016-08-29 1 views
-1

Я хочу обновить имя_поля под названием "сделано" в этом же файле CSVPython 3 - Как написать определенную строку в том же файле csv?

Это структура файла CSV:

Вход:

Email   Done 
[email protected]  
[email protected]  
[email protected] 
[email protected] 

Выход:

Email   Done 
[email protected]  1 
[email protected]  1 
[email protected]  1 
[email protected]  1 

Что Я хочу выглядеть так:

import csv 
with open(r'E:\test.csv','r', encoding='utf-8') as f: 
    reader = csv.DictReader(f,delimiter='|') 

    for row in reader: 
     #do something here# 
     #then write "1" to filename "done" 
f.close() 

Как это сделать? Большое спасибо ! :)

+1

Важные моменты здесь находятся; насколько велик файл данных? С тобой все будет в порядке? Вы в порядке с моделью, которая читает один раз, пишет один раз и обрабатывает изменения в памяти? Причина, по которой я прошу об этом; он будет намного более реалистичным, если вы загрузите CSV в память как структуру данных, сохраните его, внесите изменения и напишите обратно на диск в конечном формате, если ваша проблема его поддерживает. В противном случае поэтапное чтение/запись - это gong, чтобы убить вашу производительность, и легче иметь дело с структурой данных в памяти, чем текст на диске. –

+0

Да, это нормально с этим присутствием в памяти. Это не большие данные. – NGuyen

+0

Затем вы должны прочитать данные из csv, создать экземпляр, как кортеж в памяти, или карту, если вы хотите случайное чтение/запись в строках и обновить последнее значение по мере необходимости. Когда вы закончите или периодически, если хотите защитить от потери данных, напишите структуру данных обратно в csv. –

ответ

3

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

In [6]: with open('test.csv','r') as input: 
    ...: with open('test1.csv','w') as output: 
    ...:  header=input.readline() 
    ...:  output.write(header) 
    ...:  for line in input: 
    ...:   output.write('%s %8d\n'%(line.strip(),1)) 

In [7]: cat test1.csv 
Email   Done 
[email protected]  1 
[email protected]  1 
[email protected]  1 
[email protected]  1 

Вы также можете использовать считыватель csv и csv writer; Пользователь numpy может испытывать соблазн использовать пару loadtxt и savetxt, хотя смешение строковых и числовых значений в массиве требует немного больше ноу-хау.

В достаточно новой Python вы могли бы поставить и открывает в одном контексте: с

with open('test.csv','r') as input, open('test1.csv','w') as output: 
    ... 
+0

Спасибо, но как писать в тот же файл? – NGuyen

+0

Вы не можете переписать следующую строку. Лучше сделайте новый файл и переименуйте его после. – hpaulj

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