Python CSVファイルの取扱

Python学習【365日チャレンジ!】95日目のマスターU(@Udemy11)です。

久しぶりにサーチコンソールを覗いてみると運用しているサイトのドメイン設定がおかしいようで、サイトが表示されていない状態であることに気づきました。

原因は、ドメインが関連付けられているIPが複数のドメインに関連付けられているらしく、全く意味がわからない状態で、データベースをいじれば解決できるなんて方法もWebで見つけたものの、時間がかかりそうなので、放置プレイにすることにしました。

それより今は、Python学習に集中しないといけないので、他の適当に作成したサイトにはかまってられません。

ということで、今日もPython学習を頑張りましょう!

昨日の復習

昨日は、テンプレートの使い方について学習しました。

昨日の例では、定型文を用意して、変数を代入して文章を出力することができました。

import string

s = """\
$contents
My name is $name
"""

t = string.Template(s)
contents = t.substitute(name='Mark', contents='Nice to meet you')
print(contents)

出力結果

Nice to meet you
My name is Mark

stringモジュールは一般的な文字操作を行う標準ライブラリです。

公式ドキュメントを覗いてみると詳細が記載されていますが、ちょっと理解できないところが結構あります。

とりあえず、Templateで読み込み、substituteで指定した引数を新しく生成したテンプレートの変数に代入するという感じがわかれば問題はありません。

詳しくは、昨日の記事をごらんになってください。

それでは、本日の学習にはいりましょう!

CSVファイルの処理

まず、よく聞くCSVファイルですが、カンマ区切りと改行で、表として扱えるファイルです。

Comma Separated Value】の頭文字をとったもので、カンマ(Comma)で区切った(Separated)値(Value)という、文字そのままの意味ですね。

CSVは、ExcelやGoogleスプレッドシート、Accessなどのデータベースにも簡単に取り込むことができる汎用ファイルです。

Terapadなどのテキストエディタで開くことができますが、見た目が分かりづらいので、表計算ソフトで開いたほうが見やすいかもしれません。

ということで、早速CSVファイルを作成してみましょう。

import csv

with open('test.csv', 'w') as csv_file:
    fieldnames = ['Name', 'Count']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'Name': 'A', 'Count': 1})
    writer.writerow({'Name': 'B', 'Count': 100})

まずは、csvモジュールをインポートして、withステートメントでcsvファイル名と書き込みモードを指定。

変数fieldnamesNameCountを指定して、csv.DictWriterに書き込むcsvファイルとfieldnamesを渡してwriteheader()NameCountを渡します。

この時点でPythonファイルを実行すれば、同じ階層に、1行目だけが書き込まれた【test.csv】が作成されます。

コードではさらに、2行の値を辞書型データで指定してwriterowで書き込んでいます。

test.csv

Python CSV

つづいて、先程のコードの9行目、10行目に次のコードを足すとどうなるでしょうか?

    for i in range(10):
        writer.writerow({'Name': 'C', 'Count': i})

【test.csv】ファイルの中身はこんな感じになります。

Name,Count
A,1
B,100
C,0
C,1
C,2
C,3
C,4
C,5
C,6
C,7
C,8
C,9

この【test.csv】ファイルは、エクセルやGoogleスプレッドシートで開くことができますが、Macなので、Numbersで開いてみました。

Python CSVファイル操作

次にファイルを使って中身を出力してみましょう。

CSVファイルの活用

作成したCSVファイルは、すでに紹介したように、普通に表計算ソフトで開くことができます。

PythonでCSVファイルのデータを活用するには、ファイル読み込みのあと、データを抽出する必要があります。

先程加えた余分なデータは削除して、Nameの値がABCの3行分のデータが入った値を抽出してみます。

import csv

with open('test.csv', 'r') as csv_file:
    reader = csv.DictReader(csv_file)
    for r in reader:
        print(r['Name'], r['Count'])

出力結果

A 1
B 100
C 0

【test.csv】ファイルを読み込みモードで開いてcsv.DictReaderに値を入れた変数readerforループで回して、NameCountの値を出力していきます。

結果は、先頭行が省かれて、NameCountの値だけが抽出されています。

目に見えないものを扱う

プログラミングって、視覚で捉えられないものを扱っているという感じがするのですが、それだけ想像力が必要だということだと思います。

文字列だけが表示されているのに、それがどのように動いて、どのように形作るかをイメージできなければ、プログラムを書くことはできません。

MacやWindowsは、可視化することで、誰もが扱えるようになり、ここまでコンピューターが一般化されたわけですが、プログラミングはまさにそれらのことを一から作っていく作業なわけです。

すでに3ヶ月ほどPythonに取り組んできましたが、ファイルを扱うレクチャーに入ったくらいから、一気に必要な想像力レベル!?が上っているように感じています。

目に見えないものをどれだけ具体的に想像できるかが重要なポイントだと思うので、しっかりと想像力を働かせて、Pythonを学習していこうと思います。

それでは、明日も、Google