简体   繁体   English

Python 2.7.1:如何打开,编辑和关闭CSV文件

[英]Python 2.7.1: How to Open, Edit and Close a CSV file

I'm having trouble opening a file (amount2.csv) making a change, saving it and closing the file. 我无法打开文件(amount2.csv)进行更改,保存并关闭文件。

How does one open a file edit, save and close it? 如何打开文件编辑,保存并关闭它?

import csv

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

my error: open file 'amount2.csv', mode 'r' at 0x1004656f0 (<> removed) 我的错误:打开文件'amount2.csv',模式'r'在0x1004656f0(<>已删除)

The

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

you are seeing isn't an error, but the result of your 'print f'. 你看到的不是错误,而是'print f'的结果。 To instead see the contents of your file, you would do 要改为查看文件的内容,您可以这样做

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)

To append rows to your file, instead do 要将行追加到您的文件中,请执行此操作

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)

More info at Python CSV Docs 有关Python CSV Docs的更多信息

EDIT: 编辑:

I misunderstood at first, you want to change all entries of '1 dozen' to '12' in your csv file. 我一开始误解,你想在你的csv文件中将'1打'的所有条目都改为'12'。 I will say first, this is easier to do without using the csv module, but here is a solution using it. 我首先要说的是,如果不使用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)

If you're new to programming and python the most trobulesome line is probably 如果你是编程和python的新手,可能是最常用的

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

but this is just a list comprehension that is effectively equivalent to 但这只是一个列表理解,实际上相当于

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

You're trying to print the file object itself, which won't do much useful. 您正在尝试打印文件对象本身,这不会有用。 Have you looked at the documentation for the CSV module ? 您是否查看了CSV模块的文档 The very first code example shows you how to use csv.reader. 第一个代码示例向您展示了如何使用csv.reader。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM