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
ファイル名と書き込みモードを指定。
変数fieldnames
にName
とCount
を指定して、csv.DictWriter
に書き込むcsv
ファイルとfieldnames
を渡してwriteheader()
でName
とCount
を渡します。
この時点でPythonファイルを実行すれば、同じ階層に、1行目だけが書き込まれた【test.csv】が作成されます。
コードではさらに、2行の値を辞書型データで指定してwriterow
で書き込んでいます。
test.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で開いてみました。
次にファイルを使って中身を出力してみましょう。
CSVファイルの活用
作成したCSVファイルは、すでに紹介したように、普通に表計算ソフトで開くことができます。
PythonでCSVファイルのデータを活用するには、ファイル読み込みのあと、データを抽出する必要があります。
先程加えた余分なデータは削除して、Name
の値がA
B
C
の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
に値を入れた変数reader
をfor
ループで回して、Name
とCount
の値を出力していきます。
結果は、先頭行が省かれて、Name
とCount
の値だけが抽出されています。
目に見えないものを扱う
プログラミングって、視覚で捉えられないものを扱っているという感じがするのですが、それだけ想像力が必要だということだと思います。
文字列だけが表示されているのに、それがどのように動いて、どのように形作るかをイメージできなければ、プログラムを書くことはできません。
MacやWindowsは、可視化することで、誰もが扱えるようになり、ここまでコンピューターが一般化されたわけですが、プログラミングはまさにそれらのことを一から作っていく作業なわけです。
すでに3ヶ月ほどPythonに取り組んできましたが、ファイルを扱うレクチャーに入ったくらいから、一気に必要な想像力レベル!?が上っているように感じています。
目に見えないものをどれだけ具体的に想像できるかが重要なポイントだと思うので、しっかりと想像力を働かせて、Pythonを学習していこうと思います。
それでは、明日も、Google