Python 2.7.1:如何打开、编辑和保存CSV文件

16 投票
2 回答
96858 浏览
提问于 2025-04-17 13:23

我在打开一个文件(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(<> 已去掉)

2 个回答

0

你现在想打印文件对象本身,但这样做没什么实际用处。你有没有查看过CSV模块的文档?里面的第一个代码示例就教你怎么使用csv.reader。

23

你看到的内容其实不是错误,而是你使用的'print f'的结果。如果你想查看文件的内容,可以这样做:

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

如果你想往文件里添加行,可以这样做:

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)

想了解更多信息,可以查看 Python CSV 文档

编辑:

我一开始理解错了,你是想把csv文件中所有的'1打'换成'12'。我先说,这个操作其实不使用csv模块会更简单,不过这里我给你一个使用它的解决方案。

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)

如果你是编程新手,尤其是刚接触Python,这行代码可能会让你觉得比较棘手:

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)

但这其实只是一个列表推导式,实际上等同于:

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

撰写回答