web-dev-qa-db-ja.com

単一のCSV文字列を解析しますか?

Csv.reader(..)のような派手なものを使用せずに、単一のコンマ区切り文字列を解析できる方法はありますか? split(',')関数を使用できますが、有効な列の値にコンマ自体が含まれている場合は機能しません。 csvライブラリには、前述の特殊なケースを正しく処理するCSVファイルを解析するためのリーダーがありますが、1つの文字列だけを解析する必要があるため、これらを使用できません。ただし、Python CSVが単一の文字列自体の解析を許可する場合、それは私にとってニュースです。

13
Ahmad

csvモジュールのドキュメントを詳しく見てください。

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.

したがって、文字列がある場合:

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

「繰り返しごとに入力の行を返すオブジェクト」が必要な場合は、文字列をリストにラップするだけです。

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

そして、それがcsvモジュールで文字列を解析する方法です。

22
larsks

csvを使用して単一の文字列を解析できます。 StringIOを使用して文字列を書き込む bufferメモリファイルとも呼ばれます):

import csv
from StringIO import StringIO

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

reader = csv.reader(buff)
for line in reader:
    print(line)
15
alecxe
>>> import csv
>>> s = '"Yes, this line",can be, parsed as csv'
>>> list(csv.reader([s]))[0]
['Yes, this line', 'can be', ' parsed as csv']
>>>

基本的には上記の@larsksだけが答えますが、より簡潔で、引用符内にコンマが含まれるcsv値で機能することを示しています。

あなたが私を賛成するなら、他の答えも賛成してください。 https://stackoverflow.com/a/35822856/1196339

7
nackjicholson