Python

2016-04-09 16 views
1

kullanarak yeni bir csv dosyasına eşleşen csvfile ile eşleşen satırları yazıyorum Python'da yeniyim ve belirli dizeleri eşleştirerek csv dosya kayıtlarını azaltmaya çalışıyorum. Eşleşen satırın satırlarını yeni bir csv dosyasına yazmak istiyorum.Python

dataset screenshot

Ne yapmaya çalışıyorum (örn yalnızca olabildiğince tutuklama emri içeren satırları yazma belirli eşleme anahtar kelimeler için tüm satırları geçerek aramasıdır: Burada

bir örnek veri kümesi ise görüntüde görülen) yeni bir csv dosyasına.

İşte şimdiye kadar benim kodudur:

import csv 
with open('test.csv', 'a') as myfile: 
     with open('train3.csv', 'rb') as csvfile: 
      spamreader = csv.reader(csvfile, delimiter=',') 
      for r in spamreader: 
       for field in row: 
        if field == "OTHER OFFENSES": 
         myfile.write(r) 

test.csv boş ve train3 tüm kayıtları içerir.

import csv 

with open('test.csv', 'a', newline='') as f_outputcsv, open('train3.csv', 'r') as f_inputcsv: 
    csv_spamreader = csv.reader(f_inputcsv) 
    csv_writer = csv.writer(f_outputcsv) 

    for row in csv_spamreader: 
     for field in row: 
      if field == "WARRANT ARREST": 
       csv_writer.writerow(row) 
       break 

Bu geri çıktı dosyasına tüm satırları yazmak için csv.writer örneğini kullanır:

+0

https://docs.python.org/2/library/csv.html –

+1

'a bir göz atın. Bazı "else" ifadeleri ekleyerek neler olup bittiğini sık sık öğrenebilirsiniz. Örneğin, eğer alan == "OTHER OFFENSES": 'ise,' else: print (field) 'veya' else: print (r) 'yazabilirsiniz. Gerçek verileri gördüğünüzde karşılaştırmanızın neden başarısız olduğu belli olabilir. Örneğin. Her satırın karĢılaĢtırılmasının karĢılaĢtırılmasından sonra bir satırsonu karakteri olabilir (bu, birisinin bu konu hakkında son kez sorduğu sorunun sebebiydi ve cevapladım). "Eğer alan ==" DİĞER YETENEKLER "' yerine, alandaki "DİĞER ÇALIŞMA SAYFALARI" ifadesini kullanabilirsiniz: ' – jDo

+0

Veri kümeniz örneğinde," DİĞER ÇALIŞMA SAYISI "'na eşit bir alan yoktur. Böylece çıktı dosyasının boş olmasını beklersiniz. – schwobaseggl

cevap

0

veri kopyalama/yapıştırılan olamaz gibi test etmek biraz zor, aşağıdaki yaklaşım deneyin.

+0

Teşekkürler Martin, bu iyi çalıştı! Sadece argümanı ab olarak değiştirdim ve r'ye rb! –

+0

Harika, Python 3 kullanıyor musunuz? Eğer öyleyse, 'a', newline = '' ' –

+0

evet, Anaconda - python 3.5 ile çalışıyorum. Tekrar teşekkürler! –

0

Neler olup bittiğini öğrenmek için genellikle else ifadelerini ekleyerek öğrenebilirsiniz. Örneğin, if field == "OTHER OFFENSES":'dan sonra else: print(field) veya else: print(r) yazabilirsiniz. Gerçek verileri gördüğünüzde karşılaştırmanızın neden başarısız olduğu belli olabilir.

Ayrıca, her satırın karşılaştırmasını karıştıran yeni satır karakteri de olabilir (bu sorunun nedeninin son kez sorulmasının sebebi buydu ve ben yanıtladım). Belki python, OTHER OFFENCES'a eşit olmayan OTHER OFFENSES\n görür. Bunları eşleştirmek için daha az sıkı bir karşılaştırma veya strip() alanını kullanın.

if "OTHER OFFENSES" in field: ile if field == "OTHER OFFENSES" değiştirmeyi deneyin. =='u yaptığınızda, tam bir eşleşme sorulurken something in something_else, something için tüm metin satırını arar.