Python
 Computer >> コンピューター >  >> プログラミング >> Python

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()が便利(引用符やエスケープ処理にも対応)
  1. Pythonで文字列をバイナリ(2進数)に変換する方法をわかりやすく解説

    Pythonで文字列をバイナリに変換する基本の考え方Pythonで文字列をバイナリ(2進数)表現に変換するには、文字列内の各文字を1つずつ取り出し、それぞれを2進数へ変換したうえで、結果をひとつの文字列として連結します。各文字の文字コードは ord() 関数で取得でき、format() 関数に「b」フォーマット指定子を渡すことで、簡単に2進数形式へ整形できます。format() と ord() を使った変換方法最もシンプルなのが、format(ord(x), b) を使って各文字 x を2進数の文字列に変換する方法です。次の例では、文字列 hello world の各文字をスペース区切りのバイ

  2. Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】

    Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ