2010-11-10 25 views
5

Csv dosyalarının okunması ve yazılması için Python'un csv modülünü kullanıyorum.Python'un CSV modülünü kullanarak bir csv dosyasında belirli bir satırın üzerine yazma

Csv para cezası eklenir ve eklenir ve csv'de belirli bir satırın üzerine yazabilmek istiyorum. Başvuru için

, burada benim okuması ve ardından kod yazmadan eklemek için:

#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() 

Ve doğru olmadığı (üzerine yazma modu için temelde aynı kullanıyorum, sadece bütün csv dosyasını üzerine yazar):

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

, nasıl yazılır belirli bir satır ihtiyaç Python anlatır? Gogle ve diğer stackoverflow yayınlarını boşuna değerlendirdim. Sınırlı programlama bilgimin Google'dan ziyade suçlama olduğunu varsayıyorum.

cevap

11

Ben Steven Yanıt katacaktır:

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

Teşekkürler! Bu mükemmel çalışıyor! –

2

CSV dosyasında tek bir satırın üzerine yazamazsınız. İstediğiniz tüm satırları yeni bir dosyaya yazmanız ve ardından özgün dosya adına yeniden adlandırmanız gerekecektir.

Kullanım şablonunuz bir CSV dosyasından daha iyi bir veritabanına sığabilir. Hafif bir veritabanı için sqlite3 modülüne bakın.

+0

Teşekkür ipucu için! Şimdi sqlite3 belgelerine bakıyorum. Daha fazla veri atacak olursam muhtemelen kullanacağım. Şu anda tekilliğin çözümü iyi, çünkü csv dosyam çok büyük değil. –

İlgili konular