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

后端 未结 2 939
野趣味
野趣味 2020-12-29 07:36

I\'m having trouble opening a file (amount2.csv) making a change, saving it and closing the file.

How does one open a file edit, save and close it?

i         


        
相关标签:
2条回答
  • 2020-12-29 08:13

    The

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

    you are seeing isn't an error, but the result of your '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

    EDIT:

    I misunderstood at first, you want to change all entries of '1 dozen' to '12' in your csv file. I will say first, this is easier to do without using the csv module, but here is a solution using it.

    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

    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
    
    0 讨论(0)
  • 2020-12-29 08:27

    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? The very first code example shows you how to use csv.reader.

    0 讨论(0)
提交回复
热议问题