例えば:
Myfunction("1,2,3\n4,5,6")
出力は次のようになります。[["1","2","3"],["4","5","6"]]
リスト内包表記を使用します。
def myfunction(somestring):
return [line.split(',') for line in somestring.split('\n')]
デモ:
>>> def myfunction(somestring):
... return [line.split(',') for line in somestring.split('\n')]
...
>>> myfunction("1,2,3\n4,5,6")
[['1', '2', '3'], ['4', '5', '6']]
または、 を使用することもできますstr.splitlines()
。これは と同じように機能しますが、改行文字の組み合わせで.split()
データを分割します。最後の行も少し賢く処理します。\r
\n
\r\n
このデータがファイルからのものである場合は、適切なツールを使用することを検討してください。このcsv
モジュールは、カンマ区切りのデータを引用する複雑さをはるかにうまく処理できます。
import csv
with open('/your/csv/file.csv', 'rb') as inputfile:
reader = csv.reader(inputfile)
for row in reader:
# row is a list of column values
データはファイルから取得する必要はなく、次csv
の結果を含む反復可能オブジェクトを処理でき.splitlines()
ます。
reader = csv.reader(somestring.splitlines())
for row in reader:
# row is a list of column values
str.split
andでリスト内包表記を使用しますstr.splitlines
。
>>> strs = "1,2,3\n4,5,6"
>>> strs.splitlines()
['1,2,3', '4,5,6']
>>> [x.split(',') for x in strs.splitlines()]
[['1', '2', '3'], ['4', '5', '6']]
ヘルプstr.splitlines
:
>>> print str.splitlines.__doc__
S.splitlines(keepends=False) -> list of strings
Return a list of the lines in S, breaking at line boundaries.
Line breaks are not included in the resulting list unless keepends
is given and true.
入力が長さ N の M 行の場合、O(M*N) の代わりに O(N) スペースを取るジェネレーターを次に示します。
def myfunction(text):
from StringIO import StringIO
for line in StringIO(text):
yield line.rstrip().split(',')
メモリ消費を減らすために、具体的なリストではなく反復子を返します。結果を for ループなどで使用できます。本当に出力がリストとして必要な場合は、それをlist()
コンストラクターに渡すだけです。
ファイルから何かを読み取るためにこの関数を書いているなら、csv
モジュールはあなたの友達です:
import csv
with open('somefile.txt') as f:
reader = csv.reader(f, delimiter=',')
lines = list(reader)