2010-11-10 41 views
5

Tôi đang sử dụng mô-đun csv của Python để thực hiện một số đọc và ghi tệp csv.Ghi đè một hàng cụ thể trong tệp csv bằng mô-đun CSV của Python

Tôi đã đọc tiền phạt và phụ thêm vào tiền phạt csv, nhưng tôi muốn có thể ghi đè một hàng cụ thể trong csv.

Để tham khảo, đây là đọc sách của tôi và sau đó viết code để thêm:

#reading 
    b = open("bottles.csv", "rb") 
    bottles = csv.reader(b) 
    bottle_list = [] 
    bottle_list.extend(bottles) 
    b.close() 

    #appending 
    b=open('bottles.csv','a') 
    writer = csv.writer(b) 
    writer.writerow([bottle,emptyButtonCount,100, img]) 
    b.close() 

Và tôi đang sử dụng về cơ bản tương tự cho các chế độ ghi đè (đó là không đúng, nó chỉ ghi đè các tập tin toàn bộ csv):

b=open('bottles.csv','wb') 
    writer = csv.writer(b) 
    writer.writerow([bottle,btlnum,100,img]) 
    b.close() 

Trong trường hợp thứ hai, làm thế nào để tôi biết Python tôi cần một hàng cụ thể bị ghi đè? Tôi đã xóa sạch Gogle và các bài đăng stackoverflow khác không có kết quả. Tôi cho rằng kiến ​​thức lập trình giới hạn của tôi là đổ lỗi thay vì Google.

Trả lời

11

tôi sẽ thêm vào Steven Trả lời:

import csv 

bottle_list = [] 

# Read all data from the csv file. 
with open('a.csv', 'rb') as b: 
    bottles = csv.reader(b) 
    bottle_list.extend(bottles) 

# data to override in the format {line_num_to_override:data_to_write}. 
line_to_override = {1:['e', 'c', 'd'] } 

# Write data to the csv file and replace the lines in the line_to_override dict. 
with open('a.csv', 'wb') as b: 
    writer = csv.writer(b) 
    for line, row in enumerate(bottle_list): 
     data = line_to_override.get(line, row) 
     writer.writerow(data) 
+0

Cảm ơn! Điều này hoạt động hoàn hảo! –

2

Bạn không thể ghi đè lên một hàng trong tệp CSV. Bạn sẽ phải viết tất cả các hàng bạn muốn vào một tệp mới và sau đó đổi tên nó trở lại tên tệp ban đầu.

Mẫu sử dụng của bạn có thể phù hợp với cơ sở dữ liệu tốt hơn tệp CSV. Nhìn vào mô-đun sqlite3 cho một cơ sở dữ liệu nhẹ.

+0

Thanks for the tip! Tôi đang xem tài liệu sqlite3 bây giờ. Tôi có thể sẽ sử dụng nó nếu tôi có nhiều dữ liệu hơn để ném xung quanh. Ngay bây giờ giải pháp của singularity là tốt vì tập tin csv của tôi không phải là quá lớn. –