プログラミング Tips

ITエンジニアの雑記ブログ。
IT関連ニュースの考察や、プログラミングに関するTipsの備忘録として…
育児や日常の雑記帳としても、記事を投稿していきます。

プログラミングと日常生活に関する情報を発信しています。

カテゴリ: 開発

Python で csvファイルを読み込む方法を調べてみた!!

Webアプリを開発するにあたって、元データをDBにインポートして上げる必要がある。
今回のデータはcsv形式で存在しているため、そのファイルを読み込んで逐次DBに登録して行く。

まずはPythonでのファイル操作を習得するために、csvファイルを読み込んで逐次出力してみた


環境

  • Python 3.6.1
  • csvファイル "sample.csv"

今回は特にサードパーティモジュールをインストールする必要なく、標準ライブラリだけで実現することができた。もっとスマートに実現する方法はあるかもしれないが…まずは基本に忠実に…ということで…

実行

以下のコマンドを実行する

import codecs
 
fin = codecs.open('test.csv', 'r', 'shift_jis')
 
for line in fin:
    contents = line[:-2].split(',')
    print(contents)

このプログラムには2つの条件が含まれている

  1. 日本語を含むデータの展開
  2. 区切り文字は ','
  3. 改行コードは 'CR''LF'の2バイト構成

1.に関して、"codec"モジュールを用いて、文字コード指定で展開

fin = codecs.open('test.csv', 'r', 'shift_jis')

これは、"Shift-JIS"コードで記述されたファイルを"r"(読取り専用モード)で開くという意味

2.に関して、同一データを","単位で区切る

contents = line[:-2].split(',')

改行コード単位で"line"変数に値を取得できるが、この場合の改行コードは2バイト構成のため、"[:-2]"で改行コードを削除した構成にしている。更にsplit(',')で、データを","単位で分割し配列内に格納する

3.行末コードは"CR""LF"の2バイト構成になっている

Windows環境でファイルを生成すると、このように2バイト文字は異なる。MacOSX, Linuxではライン末尾に付与するコードは若干異なるので注意が必要


Python で QRコードの画像を読み取るサンプル作ってみた!!

QRコードを撮影した結果をデコードするのは一般的…

でもQRコードの画像データをデコードできるのかな?と気になったので、その部分を調べてみた。



環境

  • MacOSX 10.13.3 (High Sierra)
  • Python 3.6.1
  • zbar
  • pyzbar
  • Pillow

準備

  1. virtualenv 環境構築
  2. zbarをインストール

$ brew install zbar

  1. Pythonパッケージのインストール

$ pip install pyzbar $ pip install pillow

実行

今回は下記QRコードの画像ファイル("Sample_QR.png")を用意して、コードを実行する同じ階層におく

from pyzbar.pyzbar import decode
from PIL import Image
import os

image = "Sample_QR.png"

data = decode(Image.open(image))

f = open('output.txt', 'a')
f.write(data[0][0].decode('utf-8', 'ignore'))
f.close()

結果

output.txtファイルが生成されて、その中に結果が出力されていれば成功
今回は https://www.google.co.jp/が出力されている



Python 3.xで 仮想環境"virtualenv"をサクッと作る方法をまとめてみた!!

Python3系から、virtualenvの仮想環境の生成がオプション(-m)を使って、簡単に構築できるようになった。
Python標準のモジュールで"venv"というパッケージ名で取り込まれているので、それを用いる

いつも方法を忘れちゃうので、備忘録のためにここにまとめておく



環境

  • MacOSX 10.13.3 (High Sierra)
  • Python 3.6.1

環境構築

1. 準備

ディレクトリ配下に環境(bin, include, lib など)が構築される

$ mkdir testdir
$ cd testdir
$ python3 -m venv .

2. 実行

Step1. で構築した仮想環境を実行するコマンド

$ source bin/activate

ターミナル上が下記に変わったら成功
以降は、仮想環境内で実行することができる

(testdir) $

3. 終了

Step2. で構築した仮想環境を終了するコマンド

(testdir) $ deactivate

ターミナル画面から、(testdir)の表示が消えたら終了

Pythonパッケージのインストール

virtualenv環境を立ち上げたら、必要なパッケージをpipでインストールする

  • インストール方法

    $ pip install "package"
  • インストールパッケージの確認

    $ pip freeze
  • インストールパッケージの 一括 エクスポート

    $ pip freeze > requirements.txt
  • インストールパッケージの 一括 インポート

    $ pip install -r requirements.txt


"Error: C9555E: Failed to check out a license.LICENSE ERROR"の対策してみた!

以前の投稿で、STMicro社製開発キット"STM32 LoRa"の開発環境を構築した

その後、開発を続けていたが2月に入って突如ビルドができなくなった…
ということで修正方法を検証して、対策してみた



エラー「C9555E: Failed to check out a license.LICENSE ERROR」の内容

メッセージを読むと、「ライセンス期限が切れたこと」がエラーの原因と読み取れる
よって、ライセンスを確認する

"License Management > Support Period"に"Expires"の記述とあるが、これは有効期限で"2018/2"とある。2月いっぱいでライセンスが切れると思っていたが、どうやら勘違い。1月で期限切れだったみたい

よって、新しいライセンスコードを入力して、更新することで解決を目指す!!

以降に、更新方法を記す

ライセンス契約の更新方法

  1. "License Management > Support Period" の"Get LIC via Internet"を選択
    STM32F0_newPSN_activate_000
  2. ブラウザ上に表示されたページに必要事項を入力
    もっとも重要な項目 ++Product Serial #(PSN)++ に、 QXJMN-Y6Q0E-86F7K を入力する
    STM32F0_newPSN_activate_001
  3. しばらくするとこのページに登録されているメール宛に、"License ID Code(LIC)"が送られてくる
  4. "License Management"の"New License ID Code(LIC)"に入力して、"Add LIC"を選択
    "Add LIC"が選択できなければ、登録済みのLICを選択して、"Uninstall"してからもう一度"Add LIC"!!
  5. 新たに"Support Period"が、"Expires: Jan 2019"に更新されたら完了
    STM32F0_newPSN_activate_005

以上で、エラーが解消されている!!

"Build"ボタンをクリックして正常にビルドできることを確認して終わり



ConoHa VPS にroot以外のユーザを追加してみた!

WEBアプリケーションのデプロイ前に、VPS の設定を行う。その際、セキュリティを高めておくことは重要になるが、作業は忘れがちで毎回同じ内容を調べながらの作業になるため、備忘録も兼ねて残しておく。

はじめに

クライアントからVPSサーバーへの接続はSSH接続することが一般的である。その際に初期のユーザー"root"を用いることは多いが、LinuxOSにおけるrootユーザーは一般的に知られているため、このユーザーからの SSH接続を許可することはセキュリティの観点から賢明とは言えない。

よってセキュリティを高める場合には、下記を実施する。

  1. rootユーザー相当の権限をもった別ユーザーの追加
  2. rootユーザーからのアクセス禁止

更新 (2018.04.13)

ConoHa VPSに"Debian9"ベースのサーバーを構築して、WEBアプリをリリースする記事を新たに追加した。
そちらでSSH接続の設定に関して、新たにまとめた。

参照先:こちら


環境

  • サーバー側: Debian 9.0 (64bit)
  • クライアント側:Mac OSX High Sierra 10.13.2


Step.1 rootユーザー相当の権限をもった別ユーザーの追加

  1. クライアント側のMacのターミナルを起動し、以下のコマンドを入力

    $ ssh root@@{サーバーIPアドレス}
  2. 以下のメッセージが表示される。"yes"と入力

    Are you sure you want to continue connecting (yes/no)?
  3. rootパスワードを要求されるので、"ConoHa VPS"生成時にWEBコンソール上に設定したパスワードを入力。コンソールの表示が以下に切り替わると接続成功

    [root@サーバーIPアドレス ~]#
  4. 以下コマンドを入力してユーザを新規追加

    adduser [User名]
  5. 以下コマンドを入力して、パスワードの入力を求める画面が表示されるため、新規パスワードと確認のためのパスワードを再入力

    passwd [User名]
  6. 以下のコマンドを使って、rootユーザーと同じ"sudo"グループに追加する。これによって、"sudo"コマンドが利用可能になる

    usermod -G sudo [User名]
  7. 以下コマンドを入力して、パスワードの入力画面が表示される。パスワード入力後、「test」が表示されれば設定完了

    sudo echo "test"

Step2. rootユーザーからのアクセス禁止

SSH の設定ファイルを編集して、下記設定を変更する。この結果、rootユーザーがssh接続でアクセスできなくなり、セキュリティ強度が高まる。

項目 変更前 変更後
rootユーザのログイン無効化 PermitRootLogin yes PermitRootLogin no

変更前(初期状態)は、先頭に"#"が付与されて設定自体が向こうになっている場合がある。この場合は、"#"を外してほしい。

ちなみに…この変更の実施+SSHサービスの再起動の後では、rootユーザーがSSH接続できなくなる。もし接続できる場合には、設定変更が完了していないことが考えられるので、内容を確認してほしい。スペルミスなども要注意。

SSHサービスの再起動

下記コマンドを実行して、SSHサービス (sshd) を再起動する。この結果、sshの設定変更が反映される。

$ sudo /etc/init.d/ssh restart

今回のサーバーOSは、Debianになるため上記になる。CentOSでは$ sudo systemctl start sshd.service になる。



↑このページのトップヘ