2016-04-07 15 views
0

Sadece bir csv dosyası var 4000 kaydın 4'ünde ASCII olmayan karakterler var. ÖrnekPython: css dışı bir ascii karakterini kaldır

['com.manager', '2016', '16.1.23', 'en', 'kinzie', '2015-04-11T17:36:23Z', '1428773783781', '2016-03-11T09:53:45Z', 'df', '5', "\xa5\x06`'", '\xc0\x03"', '\xa2{\xac ===]\xa9}\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7>', '', '', '', 'https://play.google.com/apps/publish?account=sd#ReviewDetailsPlace:p=com.manager&reviewid=gp:AOqpTOEcQQGmjFcd-bFfU372DTrxh'] 

için CSV okuyucu tutarsız sütun sayıları gösteren

with open('/Users/duttaam/Downloads/test1.csv', 'rU') as csvfile: 
    reader_obj = csv.reader(x.replace('\0', '') for x in csvfile) 
    rownum=0 
    for row in reader_obj: 
     rownum += 1 
     if len(row) != 16: 
      print rownum 
      print row 

dört için satır okumak için aşağıdaki piton kod kullanıyorum. Ama bu satırlardaki sınırlayıcıları (,) saydığımda iyi görünüyor. Sadece görebildiğim sorun, yukarıdaki satırda gösterilen örnek satır olarak ascii olmayan karakterlerdir. Bazı karakterlerin bazı karakterlere dönüştüğünü tahmin ediyorum.

Ben tüm csv uyguladığımızda nasıl dize olmayan yazdırılabilir karakterleri kaldırmak için bir fonksiyonu ile geldi (post aşağıdaki sayesinde: Stripping non printable characters from a string in python)?

def removeSpecialcahr(s): 
     printable = set(string.printable) 
     return filter(lambda x: x in printable, s) 

işlemek için bir yolu var mı csv ve yazdırılamayan ve/veya ascii olmayan tüm karakterleri kaldırın?

Teşekkürler.

cevap

4

ASCII olmayan karakterleri dosyanıza bırakmak için, codecs.open() ile open aramanızı değiştirin. Ayrıca kendi hata işleyicinizi de tanımlayabilirsiniz ...:

import codecs 
codecs.open('file.csv', 'r', encoding='ascii', errors='ignore') 
+0

Teşekkürler @joeforker. Bu kodu kullandım ve ascii olmayan karakterleri kaldırdım ama şu kodu kullanıyorum kod dosyasını okuyup okumak için 'reader_obj = csv.reader (csvfile içinde x için x.replace (' \ 0 ',' ')) rownum = reader_obj içinde satır için 0 : rownum + = 1 len (satır) = 16 ise: baskı rownum baskı satır baskı len (satır) 'csv okuyucu düzgün dosya okunurken değil. Kodunuz benim soruma cevap verse de. BTW başka bir şekilde csv'yi etkin bir şekilde okumak için? – Dutta

+0

Unicodecsv modülünü deneyebilirsiniz: https://pypi.python.org/pypi/unicodecsv – joeforker

İlgili konular