csv」タグアーカイブ

pythonでCSVを読み込みクラスオブジェクトを配列に入れる

CSVを読み込みクラスオブジェクトを配列に入れる

CSV例,6列必要。1行目は除外する。米ヤフーファイナンスから日経平均株価データを取得すると、今日の分は取得できるのに、なぜか前日のデータが時間帯によって取得できない。そのため、取得できたデータと取得できないデータをCSVにしておいて使用する。

日付,高値,安値,始値,終値,調整終値

となっている。

クラスから実際のデータを取得するときは

df[0].indexとかdf[0].closeみたいにして取得する。つまり1行分が1オブジェクトの配列として登録されている。

 

pythonでTXTからCSV変換してMysqlへのインサート処理

#pythonメソッドは外部ファイルpy
#2020/12/21
#CSVをMysqlにインサート
#Test_Table_StockOption
#TXTからCSVに変換してCSVファイルを読み込んでMysqlのテーブルに登録を一括して行えるようにする。DB,テーブルは作成済とする。スタンドアローンでの利用

環境:MacOS BigSur、Python3、Mysql、JupiterLab Anaconda

メソッド 外部ファイルにしたmethodMysql.py これをimport methodMysql として読み込む

 

MysqlにCSVファイルをインサート

環境:MacOS Bigsur
Mysql8
CSV カンマ区切り UTF8
Pythonを使ってテキストファイルをCSVに出力して、
そのCSVファイルをMysqlのテーブルにターミナル手動でインサート処理する。
コマンドラインで実行する
LOAD DATA LOCAL INFILE

注意点はMySQLバージョン8では、デフォルトでは無効化されている。
mysql> SELECT @@local_infile;
を実行して「1」になっているかを確認する。「0」なら無効なので有効にする必要がある。
以下、下方に記載

参考サイト
http://jigsaw.hatenablog.jp/entry/2013/06/12/113016

参考、エラーになった
https://mita2db.hateblo.jp/entry/2020/01/13/163218
MySQL 8.0 で LOAD DATA LOCAL INFILE は無効化されている

以下のDBとテーブルは作成済み
作成方法については、他の記事を参照してほしい

ユーザ:maseda
pass:Tes****
DB:Stock
Table:Table_StockOption
・カラム構成
ID:id , int auto_increment、自動採番
出来高1 Volume1
前日比1 Change1
価格1 Price1
行使価格 ExercisePrice
価格2 Price2
前日比2 Change2
出来高2 Volume2
月限 Month , 例 12月限 12
取引日付、株探掲載日付 OptionDate ,date , DATE(NOW()) >> 2014-01-15
テーブル取り込み作成日 CreateDate ,datetime, NOW() >>2014-01-15 17:05:43
予備YOBI (テキスト),text


CSVファイルをテーブルのカラムにインサート処理する。
事前に与える値
「月限」はファイル名に記載していないので、取り込み毎に与える。
今後ファイル名に12月限みたいに記載してそこから取得するようにするか?

また「取引日付、株探掲載日付 OptionDate」については、任意の日付を与える。
「テーブル取り込み作成日」は、NOW()で与える。

@1から@7はCSVのカラムの左側からの順番で、列数は7つ
なおIDカラムが存在するが自動採番なので何も指定しない

mysqlのコマンドラインで実行する。ファイル名とテーブル名、カラム等を変更。
CSVは7つあり、テーブルのカラムは12こある。そしてIDは自動採番設定あり。
CSVの1番目を@1として該当のカラムVolume1に入れる。
SET Volume1=@1
以降CSVの@番号をカラム名に入れていく。

画像CSVの構成7つの列がある

Number
テーブルカラム一覧画像、Volume1にCSVの1列目が入る。IDは自動採番なのでCSVにはない

キャプチャ

LOAD DATAを実行するとエラーになった。

エラーになった。↑
LOAD DATA INFILE LOCAL は セキュリティ上のリスクになるため、デフォルトでは無効化されているらしい。

・以下の2つを設定する
1ターミナル
$ mysql -u root -p –local_infile=1

2mysql側
mysql> SET GLOBAL local_infile=on;

確認
SELECT @@local_infile;

1になっているのでOK。

user:masedaでMysqlに接続して再度確認して問題なし。

 

warningはあるがCSVデータは登録されているようだ。

 

一旦、データを消して再度CSVを登録してワーニングを見る
ワーニングを表示させるには
show warnings;

データを全部削除
mysql> delete from Table_StockOption;
Query OK, 85 rows affected (0.02 sec)

再度、Loadを実行
そして
show warnings;
warningが表示された。
どうやら、値がない(空)でワーニングが表示されたようだ。空でもいいので
これは無視していいようだ。
INTで空の場合は0が入っている
| Warning | 1366 | Incorrect integer value: ” for column ‘Volume1’ at row 85 |
| Warning | 1366 | Incorrect integer value: ” for column ‘Change1’ at row 85 |
| Warning | 1366 | Incorrect integer value: ” for column ‘Price1’ at row 85 |

 

IDはリセットしていないので、削除した後に追加すると次の番号がふられるから、
実際の行数とは一致しない。

・mysql auto_increment リセット
ALTER TABLE テーブル名 AUTO_INCREMENT = 1;

なので、データをdeleteしてから実行するとよいはず。
delete from Table_StockOption;
ALTER TABLE Table_StockOption AUTO_INCREMENT = 1;

 

>>削除してリセットまで済。次は、必要なデータを順次取り込む。今ここ、2020-12-18、11時27分
—適宜、ファイル名を変更していく

mysqlコマンド

 

 

python テキストファイルを読み込んで、CSVファイルを出力する

 

#テキストファイルを読み込んで、CSVファイルを出力する
#def outMojiMK(text):テキストファイルの1行をtextに入れて、空白をカンマに置換する
#カンマに置換してCSVとして出力する
#今の手順は、株探のページからオプションのデータをテキストファイルに保存
#そしてShift+Enterで実行
#なお、テキストファイルとCSVファイルは今の所指定である。上書き注意

anaconda、JupyterLabを使用。Shift+Enterで実行する

テキストファイル画像、スペースで配置されている。状態をカンマに置き換えたいテキストファイル

↓CSVにした。不足分はカンマを追加している

CSV

表計算アプリでCSVを表示した

Number

修正が必要だったので改良したものがこちら。Put側にも抜けた文字が存在したので、0を挿入するようにした。↓2020/12/18

 

python メソッド、半角と全角の置換、CSV向け

 

ゲームプログラム、swift3.0でCSVファイルを扱うのでSwiftCSVライブラリをゲットしたがエラーでまくり

swift3.0でCSVファイルを扱うのでSwiftCSVライブラリをゲットしたがエラーでまくり

色々エラー

https://github.com/naoty/SwiftCSV
良かったライブラリあるじゃん、楽できるじゃんと思ったが、
でもSwiftのバージョン3.0に上がったためにエラー20件ほど。チクチク直すが、自分で基本的なところだけでも作ったほうが良くないか?と思いはじめて、簡単読み込みを作り直すことにする
続きを読む