市場情報と雑学と 〜明日使える知識を〜

某大手電気メーカーに勤める社内SE。マーケティング的なことも業務の中に入ってきているなかで有望な市場分析を発信していきます。また、導入してきたなかで便利な小物があれば紹介していきたいと思います。

Pythonでファイル処理(csv・sqlite)をまとめてみた

Pythonのファイル保存(csvやsqlite3)関係をまとめてみた


 

 Pythonでいろいろな処理を自動化し

 

 ログなどを残す際はファイル出力が必要となります。

 

今回の記事では数あるPythonの利用方法の中で

 

 

Pythonでデータを取得したのはいいけど保存はどうしよう」

「外部ファイルへのアクセス方法は?」

「より簡単にアクセスできないか」

 

といったファイル保存に特化した内容をまとめています。

 

使うときには忘れがちな保存関係をまとめました。

 

それでは実際のコードを用いてファイルの読み書きを行います。

 

 

CSVでファイルを読み書きする

学術系では必須のcsvの入出力について学びます。

 

 

 一般企業ではエクセル形式への読み書きが多いと思います。

 

 

csvは軽量のテキストなのでデータ処理の基本となります。

 

 

一次元配列のcsvへの書き込み

import csv

list = ["python","csv","test"]

with open('sample1.csv', 'w') as f:
    writer = csv.writer(f, lineterminator='\n') # 改行コード(\n)を指定しておく
    writer.writerow(list)     # listを渡す

二次元配列のcsvへの書き込み

 

二次元配列の書き込みにはwriterowsメソッドを使います。

 

list2 = [[1, 2, 3], [10, 20, 30], [100, 200, 300]]
with open('sample2.csv', 'w') as f:
    writer = csv.writer(f, lineterminator='\n') # 改行コード(\n)を指定しておく
    writer.writerows(list2)     # 二次元配列の場合

 

withを使わずにCSVに書き込みする

 with句を使わずに下記のように書くこともできます。

 

読み書きモードは指定する モードは

 

r 読取 w 上書 a 追記

 

となります。

import csv

f = open('sample3.csv', 'a')

writer = csv.writer(f, lineterminator='\n')
writer.writerow(list)
writer.writerows(list2)

f.close()

 

csvファイルの読み込み

 

import csv

file = './sample1.csv'
f = open(file, 'r')
rows = csv.reader(f)

for row in rows: # 一行ずつ読み出す
    print(row)

f.close()

pandasを使ってcsvを読み取る

 簡単にデータフレーム化もできます。

import pandas as pd

df = pd.read_csv('sample1.csv')

 

 

sqlite3を使ってデータベースに書き込む

sqlite3を使ってデータベースを作る

import sqlite3
from contextlib import closing

dbname = 'database.db'

with closing(sqlite3.connect(dbname)) as conn:
    c = conn.cursor()

    # executeメソッドでSQL文を実行する
    create_table = '''create table users (id int, name varchar(64),
                      age int, gender varchar(32))'''
    c.execute(create_table)
    conn.close()

 

sqlite3を使ってデータを挿入する

 

import sqlite3
from contextlib import closing


with closing(sqlite3.connect(dbname)) as conn:

    c = conn.cursor()

    # SQL文に値をセットする場合は,Pythonのformatメソッドなどは使わずに,
    # セットしたい場所に?を記述し,executeメソッドの第2引数に?に当てはめる値を
    # タプルで渡す.
    sql = 'insert into users (id, name, age, gender) values (?,?,?,?)'
    user = (1, 'Taro', 20, 'male')
    c.execute(sql, user)

    # 一度に複数のSQL文を実行したいときは,タプルのリストを作成した上で
    # executemanyメソッドを実行する
    insert_sql = 'insert into users (id, name, age, gender) values (?,?,?,?)'
    users = [
        (1, 'Taro', 20, 'male'),
        (2, 'Shota', 54, 'male'),
        (3, 'Nana', 40, 'female'),
        (4, 'Tooru', 78, 'male'),
        (5, 'Saki', 31, 'female')
    ]
    c.executemany(insert_sql, users)
    conn.commit()

    select_sql = 'select * from users'
    for row in c.execute(select_sql):
        print(row)
    conn.close()

 

 

pandasを使ってデータベースの読み書きをする

 

 

 

pandasを使ってsqlite3を読みだす

 

import pandas as pd
import sqlite3


dbname = 'database.db'
conn = sqlite3.connect(dbname)
c = conn.cursor()

df_sql = pd.read_sql_query("select * from users", conn)
conn.close()

 

 

さらにdataframeでsqlite3に行追加する

df_ins = pd.DataFrame(6, 'yuta', 24, "male", columns=df_sql.columns)
df_ins.to_sql("users", conn,  if_exists='append', index=None)

 

 

 テーブルまるごとをDataFrameのレコードで入れ替える場合はif_exists='replace'とする。 

 

 

 

 

 

Python学習のおススメ

Pythonはパターンで学習できます。

実際のコードを写経して身に着けるのがおすすめです

 

簡単な実行文から体系的に学べるPyQがおすすめです。

 

ブラウザ上でPythonに特化した写経を1000個以上実施可能です。

 

初学習で終える自信がない方向けの最初の一冊は

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ」がおすすめです。

 

2冊目は(あるいは学習意欲の高いかたは)Pythonの基礎知識が隅々まで解説されている「入門Python3」がおすすめです。

 

業務で自動化をしたい、など目標がふんわりとしている方には

「退屈なことはPythonにやらせよう」もおススメです。

こちらの本は自動化に集中した内容となっており、流し読みで自分のスキルを高めることができます。僕もだいぶお世話になりました(笑)

 

 

有料の動画講座に関して言えばUdemyさんがおすすめです。

 

こちらのサイトは初学がある程度すすんでいる方向けです。

 

有料だけに講座ごとのジャンルが豊富で学びたい講座を選択して選ぶことが出来ます。
PythonではAI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで10万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。

まとめ

 

今回の記事では

 

・ファイル(csv)の読み書き

・sqlite3を使用したデータベースへの書き込み

・pandasを利用したデータベースの読み書き

 

をまとめました。

 

お疲れさまでした