Python 2.7.1: как открыть, изменить и закрыть файл CSV - программирование
Подтвердить что ты не робот

Python 2.7.1: как открыть, изменить и закрыть файл CSV

У меня возникли проблемы с открытием файла (amount2.csv) с внесением изменений, сохранением и закрытием файла.

Как открыть файл, сохранить и закрыть его?

import csv

changes = {
    '1 dozen' : '12'
    }
with open('amount2.csv', 'r') as f:
reader = csv.reader(f)
print f
f.close()

моя ошибка: открыть файл 'amount2.csv', режим 'r' на 0x1004656f0 (< > удален)

4b9b3361

Ответ 1

<open file 'amount2.csv', mode 'r' at 0x1004656f0>

который вы видите, не является ошибкой, а результатом вашего "print f". Чтобы вместо этого увидеть содержимое вашего файла, вы бы сделали

with open('test.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        # row is a list of strings
        # use string.join to put them together
        print ', '.join(row)

Чтобы добавить строки в ваш файл, вместо этого выполните

changes = [    
    ['1 dozen','12'],                                                            
    ['1 banana','13'],                                                           
    ['1 dollar','elephant','heffalump'],                                         
    ]                                                                            

with open('test.csv', 'ab') as f:                                    
    writer = csv.writer(f)                                                       
    writer.writerows(changes)

Дополнительная информация на Документы CSV Python

EDIT:

Сначала я неправильно понял, вы хотите изменить все записи от "1 дюжины" до "12" в вашем файле csv. Во-первых, это проще сделать без использования модуля csv, но вот решение, использующее его.

import csv

new_rows = [] # a holder for our modified rows when we make them
changes = {   # a dictionary of changes to make, find 'key' substitue with 'value'
    '1 dozen' : '12', # I assume both 'key' and 'value' are strings
    }

with open('test.csv', 'rb') as f:
    reader = csv.reader(f) # pass the file to our csv reader
    for row in reader:     # iterate over the rows in the file
        new_row = row      # at first, just copy the row
        for key, value in changes.items(): # iterate over 'changes' dictionary
            new_row = [ x.replace(key, value) for x in new_row ] # make the substitutions
        new_rows.append(new_row) # add the modified rows

with open('test.csv', 'wb') as f:
    # Overwrite the old file with the modified rows
    writer = csv.writer(f)
    writer.writerows(new_rows)

Если вы новичок в программировании и python, то наиболее тробословная линия, вероятно,

new_row = [ x.replace(key, value) for x in new_row ]

но это просто понимание списка, которое фактически эквивалентно

temp = []
for x in new_row:
    temp.append( x.replace(key, value) )
new_row = temp

Ответ 2

Вы пытаетесь напечатать сам объект файла, который не пригодится. Вы просмотрели документацию для модуля CSV? В самом первом примере кода показано, как использовать csv.reader.