2016-03-06 21 views
5

Tek bir virgülle ayrılmış bir dizeyi csv.reader (..) gibi süslü bir şey kullanmadan ayrıştırma yolu var mı? split(',') işlevini kullanabilirim, ancak geçerli bir sütun değeri virgülün kendisi içerdiğinde bu çalışmaz. Csv kütüphanesi, daha önce bahsedilen özel durumu doğru bir şekilde işleyen CSV dosyalarını ayrıştırmak için okuyuculara sahiptir, ancak bunları kullanamam çünkü sadece tek bir dizeyi ayrıştırmam gerekiyor. Bununla birlikte, Python CSV tek bir dizginin kendisini ayrıştırmaya izin veriyorsa, o zaman bu bana bir haber.Tek bir CSV dizesi ayrıştırılıyor mu?

cevap

11

: (aynı zamanda hafıza dosyalarını olarak da bilinir) bir dize buffer yazmak için StringIO kullanın dize:

>>> s = '"this is", "a test", "of the csv", "parser"' 

Ve "bir satır döndüren bir nesne Her yineleme" için girdi, sadece bir listede dize sarın edebilirsiniz:

>>> r = csv.reader([s]) 
>>> list(r) 
[['this is', 'a test', 'of the csv parser']] 

Ve bu csv modülü ile bir dize ayrıştırmak nasıl.

+0

Kullanmak daha zarif olur 'iter (ler) yerine' 's '' (bir liste belirterek) yerine genel bir yineleyiciye. Ama benim +1 – RafaelC

+0

'um var. Bu, dizenin değerler içinde satır beslemelerini alıntılamış olması durumunda işe yaramayacaktır. @ alecxe'nin cevabı daha mantıklı – swooby

9

Tek bir dize csv ile ayrıştırabilirsiniz.

reader(...) 
    csv_reader = reader(iterable [, dialect='excel'] 
          [optional keyword args]) 
     for row in csv_reader: 
      process(row) 

    The "iterable" argument can be any object that returns a line 
    of input for each iteration, such as a file object or a list. The 
    optional "dialect" parameter is discussed below. The function 
    also accepts optional keyword arguments which override settings 
    provided by the dialect. 

Yani eğer: diyor csv modülü için dokümantasyon, en yakından bakın

import csv 
from StringIO import StringIO 

s = "your string" 
buff = StringIO(s) 

reader = csv.reader(buff) 
for line in reader: 
    print(line) 
+0

Python 3 için io içe aktarma StringIO'yu kullanın [bkz.] (Https://docs.python.org/3/library/io.html#text-io) –

İlgili konular