PythonでCSV文字列を配列(リスト)に変換する方法を徹底解説
PythonでCSV形式の文字列を配列(リスト)に変換する方法
CSV形式の文字列をPythonのリストに変換する最も簡単な方法は、str.split()メソッドでカンマ(,)ごとに文字列を分割し、さらにstrip()メソッドで各要素の前後にある余分な空白を取り除くことです。
1. split()とmap()を使う基本的な方法
>>> s = "1, John Doe, Boston, USA"
>>> print(list(map(str.strip, s.split(','))))
['1', 'John Doe', 'Boston', 'USA']
このコードでは、まずs.split(',')でカンマ区切りに分割し、map(str.strip, ...)で各要素の先頭・末尾の空白を削除しています。Python 3ではmapがイテレータを返すため、list()で明示的にリストへ変換している点に注意してください。
2. 複数行のCSV文字列を処理する方法
複数行のCSVデータが含まれる文字列の場合は、まず改行(\n)で行ごとに分割し、その後それぞれの行をカンマで分割して空白を除去します。
>>> s = "1, John Doe, Boston, USA\n2, Jane Doe, Chicago, USA"
>>> print([list(map(str.strip, s_inner.split(','))) for s_inner in s.splitlines()])
[['1', 'John Doe', 'Boston', 'USA'], ['2', 'Jane Doe', 'Chicago', 'USA']]
splitlines()メソッドは文字列を行ごとに分割してリストを返すため、リスト内包表記と組み合わせることで、ネストした2次元リストとして結果を取得できます。
3. csvモジュールのreader()を使う方法
Pythonの標準ライブラリであるcsvモジュールにも、同じ目的で利用できるreader()というヘルパー関数が用意されています。
>>> import csv >>> s = "1, John Doe, Boston, USA\n2, Jane Doe, Chicago, USA".splitlines() >>> x = csv.reader(s) >>> print(list(x)) [['1', ' John Doe', ' Boston', ' USA'], ['2', ' Jane Doe', ' Chicago', ' USA']]
csv.reader()は各行を自動的にカンマで分割してくれますが、空白の除去までは行わない点に注意が必要です。空白も取り除きたい場合は、上記のstrip()との組み合わせを併用しましょう。
まとめ
- 単純なCSV文字列なら
split(',') + strip()の組み合わせが手軽でおすすめ - 複数行データは
splitlines()で行分割してから各要素を処理する - 本格的なCSV解析には標準ライブラリの
csv.reader()が便利(引用符やエスケープ処理にも対応)
-
Pythonで文字列をバイナリ(2進数)に変換する方法をわかりやすく解説
Pythonで文字列をバイナリに変換する基本の考え方Pythonで文字列をバイナリ(2進数)表現に変換するには、文字列内の各文字を1つずつ取り出し、それぞれを2進数へ変換したうえで、結果をひとつの文字列として連結します。各文字の文字コードは ord() 関数で取得でき、format() 関数に「b」フォーマット指定子を渡すことで、簡単に2進数形式へ整形できます。format() と ord() を使った変換方法最もシンプルなのが、format(ord(x), b) を使って各文字 x を2進数の文字列に変換する方法です。次の例では、文字列 hello world の各文字をスペース区切りのバイ
-
Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】
Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ