見出し画像

pandasライブラリを使ってcsvからsqlを生成する その5

前回は、csvファイル名とテーブル名をが外部から指定できるように追加を行った。これで対象のcsvファイルが変るごとにpythonソースを書きなおす必要はなくなった。
ただしそれだけでは存在しないcsvファイルを指定すると、エラーが発生する。別にシステムが暴走しているわけではないから、気にする必要もない。
しかし気分が良くないから、ファイルの存在確認のプロセスを追加することにした。下記は、そこまで対応したソースの全文となる。

import pandas as pd
import sys
import os

## sqlの前方部分を作成
def sqlSf(csvfile,table):
	array = pd.read_csv(csvfile, header=0)
	header = array.columns

	n = 0
	sql = "INSERT INTO " + table + "("
	for clmn in header:
		if n == 0:
			sql += clmn
		else:
			sql += ", " + clmn
		n += 1
	sql += ") values ("
	return sql

## sqlの前方部分に実際に入力するカラムの内容を結合して
## 一塊の文字列(files)にする
def sqlf(csvfile,table):
	sqlS = sqlSf(csvfile,table)

	array = pd.read_csv(csvfile).values.tolist()

	files = ""
	for tmp in array:
		sqlE = ""
		n = 0
		for dat in tmp:
			if n == 0:
				sqlE += "'" + str(dat) + "'"
			else:	
				sqlE += ", " + "'" + str(dat) + "'"
			n += 1
		sql = sqlS + sqlE + ");"
		files += sql + "\n"
	return files

## 最初の処理
def main(csvFile,tableName):
	print("sqlファイルを作成します。")
	files = sqlf(csvFile,tableName)
	f = open(tableName + ".sql", "w")
	f.write(files)
	f.close()
	print("sqlファイルを作成しました。")

## 指定されたファイルの有無を確認する
def fileExistence(csvFile,tableName):
	is_file = os.path.isfile(csvFile)
	if is_file:
		main(csvFile,tableName)
	else:
		print(csvFile + "は存在しません!")

## コマンドラインからcsvファイル名とテーブル名
if len(sys.argv) > 2:
	args = sys.argv
	# csvファイル名とテーブル名の指定
	csvFile = args[1]
	tableName = args[2]
	fileExistence(csvFile,tableName)

else:
	print("下記のように入力してください。")
	print("py csvsql,py csvファイル名 テーブル名")
	sys.exit()

まずは実行して挙動を確認してみる。

まずlsコマンドでkritik.csvというファイルがあることを確認した後。下記のコマンドで実行することになる。kritik はここでのテーブル名である。
 py csvSql.py kritik.csv kritik

csvファイルを指定して事項する

実行した後で、再びlsコマンドを実行すると、kritik.sqlというsqlファイルふできているのが、確認できている。

それでは下記を実行したらどうなるだろうか。

py csvSql.py kritk.csv kritik

存在しないcsvファイルを指定して事項する

kritk.csvは存在しないファイルだから、その旨のメッセージが表示されている。多くの人には蛇足かもしれないが、以下にファイルの存在確認を行っている箇所を抜き出して書いておく。

## 指定されたファイルの有無を確認する
def fileExistence(csvFile,tableName):
	is_file = os.path.isfile(csvFile)
	if is_file:
		main(csvFile,tableName)
	else:
		print(csvFile + "は存在しません!")

時間が無くなったからここでまでする。不足と思われるところは、時間が取れたときに、追記する予定でいる。

この記事が気に入ったらサポートをしてみませんか?