1

次のサンプルデータの2行目のように、一部のデータフィールドにコンマ区切り文字が含まれている「CSV」があります。

"1","stuff","and","things"
"2","black,white","more","stuff"

ソースデータを変更できず、str.split()の方法がわからず、値「black、white」に分割されません。

私が自分の問題に取り組んだ方法:

  1. 私はpartition()を調べましたが、それがどのように役立つかわかりません。
  2. 正規表現がデータを適切にキャプチャすることは確かですが、1つを分割に結び付ける方法がわかりません。
  3. ソースのすべての行には常に同じ数のフィールドがあるので、maxsplitを設定すると役立つと思いましたが、それでも「黒、白」内で分割され、最後の値を失うことになると考えて、それについて自分自身で話しました。 (この場合は「もの」になります)。

確かにこれは簡単に克服できるので、何か新しいことを学ぶのを楽しみにしています!

あなたの助けは大歓迎です。

4

3 に答える 3

2

csvおよびを使用するStringIO

>>> import csv, StringIO
>>> data = """"1","stuff","and","things"
... "2","black,white","more","stuff"
... """
>>> reader = csv.reader(StringIO.StringIO(data))
>>> for row in reader:
...     print row
... 
['1', 'stuff', 'and', 'things']
['2', 'black,white', 'more', 'stuff']
于 2012-11-06T02:58:33.300 に答える
1

ソースがCSVでなく、文字列内の引用符のバランスを取りたい場合は、shlexモジュールを使用してみてください。

import shlex
lex = shlex.shlex('"2","black,white","more","stuff"')
for i in lex:
    print i
于 2012-11-06T02:35:51.983 に答える
0

文字列の外側のコンマの後には、常に二重引用符が続きます。ただ(または),"の代わりにただ分割する,","

>>> x = '"2","black,white","more","stuff"'
>>> x
'"2","black,white","more","stuff"'
>>> x.split(',"')
['"2"', 'black,white"', 'more"', 'stuff"']
>>> [y.strip('"') for y in x.split(',"')]
['2', 'black,white', 'more', 'stuff']

もちろん、効率のために編集する

YevgenYampolskiyの提案shlexも代替案です。

>>> x = '"2","black,white","more","stuff"'
>>> x
'"2","black,white","more","stuff"'
>>> import shlex
>>> y = shlex.shlex(x)
>>> [i.strip('"') for i in y if i != ',']
['2', 'black,white', 'more', 'stuff']
于 2012-11-06T02:42:18.473 に答える