import (Python)

組み込み関数の入ったモジュールや長いプログラム、データファイルを外部から読み込むときの記法としてimport がPythonで用意されています。

書き方として、import print_module as pm としておけば、main.py で外部関数をpm.Hello として読めるということです。

print_module.py

def Hello(name):
	print("Hello {}!".format(name))

main.py

import print_module as pm
 
pm.Hello("World")

結果

Hello World!

事前に辞書ファイルを外部に用意して必要に応じて呼び出すようにすることも出来ますね。

music_list.py

Titles = [
        "Atmosphere",
        "I Need Your Love",
        "Enigma",
        "Addicted To A Memory",
]
Artists = [
        "Husman",
        "First State",
        "Seth Hills",
        "ゼッド",
]
music = dict(zip(Titles, Artists))

query.py

import music_list as mu

title = input("タイトルを入力してください。:")
if title in mu.music:
        print(mu.music[title])
else:
        print("見当たりません。")

結果

タイトルを入力してください。:Addicted To A Memory
ゼッド

※ 訂正)Hello(name) 関数の) が足りない転記ミスを修正しました。

enumerate関数(Python)

前回のエントリーでは複数のリストを辞書として登録するzip関数の使い方を学びました。今回はfor ループでリストのインデックスを扱う、enumerate関数の使い方をめも。

Titles =[
       "Bittersweet - Radio Edit",
        "Anchor",
        "Get There",
        "Set Me Free",
        "Untouchable",
]
Artists = [
        "Dyro",
        "Tritonal",
        "Paris Blohm",
        "Dyro",
        "Tritonal",
]

例えば、タイトルとアーティストの2つのリストをインデックス変数を含めて処理したいときに、for ループの変数に< , > を付けて併記したいとします。ループで取り出した要素がリストの何番目かをPythonが自動的にインデックス値として用意してくれるのがenumerate関数というわけですね。

for i, (Titles, Artists) in enumerate(zip(Titles, Artists)):
    print(i, Titles,"/", Artists)

前回の応用でenumerate関数の引数に2つのリストをzip関数でまとめて渡せばOK。インデックスと2つのリストの処理をいろいろやってくれるスゴイやつです。良いですね。

0 Bittersweet - Radio Edit / Dyro
1 Anchor / Tritonal
2 Get There / Paris Blohm
3 Set Me Free / Dyro
4 Untouchable / Tritonal

zip関数(Python)

Python で順序と数の一致した2つのリストをキーとバリューとする1対の辞書を作りたいときに便利なzip関数の使い方を検索したのでメモ。

Pythonで辞書の初期値をまとめて登録する方法 | Nana-Korobi

zip_function.py

Titles = [
        "Kuaga(Lost Time)(Radio Edit)",
        "Hands",
        "Dreams Lost Kings Remix",
        "We The Fire",
        "NANIMONO(feat.米津玄師)",
        "DREAM ILLUMINATION",
]
Artists = [
        "Pierce Fultion",
        "Gareth Emery",
        "Life of Dillon",
        "赤西仁",
        "中田ヤスタカ",
        "CTS",
]

music = dict(zip(Titles, Artists))
for title in music.items():
    print(title)

新しい空の辞書music をdict で定義するときに引数に2つのリストをzip関数にまとめて渡すとキーとバリューをまとめて登録できるという優れもの。良いですね。

('Kuaga(Lost Time)(Radio Edit)', 'Pierce Fultion')
('Hands', 'Gareth Emery')
('Dreams Lost Kings Remix', 'Life of Dillon')
('We The Fire', '赤西仁')
('NANIMONO(feat.米津玄師)', '中田ヤスタカ')
('DREAM ILLUMINATION', 'CTS')

 

突然ですが、Python 入門

Python には、インタプリタ(対話形式)とスクリプトの2つの方法があります。

python とだけコマンドを打つと対話型のプロンプトで実行可能になります。

$ python
>>>

プロンプトを抜けるには[Ctrl]+[D]です。
一方、テキストファイルに拡張子.py としてプログラムしたスクリプトを実行するにはpython test.py です。

$ vi test.py    # スクリプトを編集
↓ を保存。
print("Hello World!")

$ python test.py    # スクリプトを実行
Hello World!

python 入門

>>> 1+2  # 算術計算
3
>>> 6/5  # 割り算の結果はfloat型に
1.2
>>> 3*4
12
>>> type(1.4)  # データ型の問い合わせ
<class 'float'>
>>> type("hello")
<class 'str'>
>>> x=20  # 変数
>>> print(x)
20
>>> y=15  # 変数同士の演算
>>> print(x+y)
35
>>> a=[1,2,3,4,5]  # リスト
>>> print(a)
[1, 2, 3, 4, 5]
>>> len(a)  # リストの長さを取得
5
>>> a[1]  # リストの要素にアクセス
2
>>> a[4]=99  # リストに値を代入
>>> print(a)
[1, 2, 3, 4, 99]
>>> a[0:2]  # インデックスの0番から2番まで取得
[1, 2]
>>> a[1:]  # インデックスの1番から最後まで取得
[2, 3, 4, 99]
>>> a[:3]  # インデックスの最初から3番まで取得
[1, 2, 3]
>>> a[:-1]  # インデックスの最初から最後のひとつ前まで取得
[1, 2, 3, 4]
>>> a[:-2]  # インデックスの最初から最後の2つ前まで取得
[1, 2, 3]
>>> me={"height":180}  # ディクショナリを作成
>>> me["height"]  # 要素にアクセス
180
>>> me["weight"]=80  # 新しい要素を追加
>>> print(me)
{'height': 180, 'weight': 80}

ブーリアン とif for

&>>> hungry=True    # お腹すいてる?
>>> sleepy=False    # 眠い?
>>> type(hungry)    # 型取得
<class 'bool'>
>>> not hungry    # ブーリアン演算
False
>>> hungry and sleepy    # 空腹 かつ 眠い
False
>>> hungry or sleepy    # 空腹 または 眠い
True

>>> hungry=True    # if 文
>>> if hungry:
...     print("I'm hungry")    # if の中身は行頭空白4つ分インデントを空ける
......
I'm hungry
>>> hungry=False
>>> if hungry:
...     print("I'm hungry")
... else:             # else の中身も行頭空白4つ分のインデントを空ける
...     print("I'm not hungry")
...     print("I'm sleepy")
...
I'm not hungry
I'm sleepy

>>> for i in [1,2,3]:    # for 文(繰り返し)i を print
...     print(i)
...
1
2
3
>>> for i in range(1,11):    # range で指定
...     print(i)
...
1
2
3
4
5
6
7
8
9
10

>>> def hello():    # 関数を定義
...     print("Hello World!")
...
>>> hello()
Hello World!

>>> def Hello(object):    # 引数付きの関数を定義
...     print("Hello "+object+"!")
...
>>> Hello("cat")
Hello cat!
>>>

MS Office 2019のインストール

遅ればせながら、Office がバージョンアップして2019 になりPC2台までインストールできるオンラインコード版が買えるようにになったのでAmazon.co.jp でポチりました。

Microsoft Office Personal 2019 (最新 永続版)|オンラインコード版|Windows10|PC2台

インストールは簡単。Amazon.co.jp のサイトにログイン、ゲーム&PCソフトダウンロードライブラリのリンクから

[Office.comへ] のリンクをクリックしてインストレーションに従うだけです。

[次へ] をクリック。

[インストールする] をクリック。

Excel 2019 を起動。

特典の色々付いているOffice365 をなぜ買わないのかとお叱りを受けそうな所ですが、サブスクリプションは使わないと初期投資の元を取れないのがもったいないと思ったので・・・。機能は2016とあまり変わらないというか、変わらないところが扱いやすくて良いですね。

Anaconda3 はどこ?ここ?

Anaconda3(ディストリビューション)が入っていなかったのでPython3 のインストールやり直し。
シンボリックリンクを削除。

# rm /usr/local/python/bin/python3
# rm /usr/local/python/bin/pip3.7

パスを削除。

# vi ~/.bash_profile

↓ 行を削除
export PATH=$PATH:/usr/local/python/bin

インストールディレクトリを削除。

# rm -fr /usr/local/python/

https://www.anaconda.com/download からAnaconda 2018.12 for Linux Installer をダウンロード。

インストール方法は、Anaconda で Python 環境をインストールする Qiita – @t2y をご参考下さい。

今回は、/home/gusachan/anaconda3/ にインストールしました。パスを通して

$ export PATH=/home/gusachan/anaconda3/bin:$PATH

バージョン確認。

追記)永続的にパスを通すには、.bash_profile に以下の記述で保存。

# vi ~/.bash_profile

↓ 追記
export PATH=/home/gusachan/anaconda3/bin:$PATH

Python3 をソースからビルド

LinuxにPython3系をインストールする手順 を参考にPython3 をソースからビルド。

まず、yum から必要なパッケージをインストール。

# yum install make gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

Python3.7.2 をwget でダウンロード、保存。

# cd /usr/local/src
# wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

圧縮ファイルを解凍、make && make install

# tar xvzf Python-3.7.2.tgz
# cd Python-3.7.2
# ./configure --prefix=/usr/local/python
# make && make install

ここでlibffi モジュールが見つかりませんのエラー。

ModuleNotFoundError: No module named '_ctypes'
make: *** [install] Error 1

yum でlibffi-devel をインストール、再チャレンジ。成功。

# yum install libffi-devel

./bash_profile にパスを追記。

# vi ~/.bash_profile
 
↓を追記
export PATH=$PATH:/usr/local/python/bin

シンボリックリンクを貼って

# ln -s /usr/local/python/bin/python3 /usr/local/bin/python
# ln -s /usr/local/python/bin/pip3.7 /usr/local/bin/pip

ターミナル再起動。パスを反映させて python –version バージョン確認。

お疲れ様でした。

サーバーに接続できません

Firefox でサイトを閲覧しようとすると「アクセスしているサイトを見つけられません。」と表示される件。

コマンドプロンプトからサイトアドレスをnslookup すると、「[domain] を見つけられません」とエラー。

ルーターのDNS が間違っているのかと思い、同じくコマンドプロンプトからtracert してみましたが「ターゲットシステム名 [domain] を解決できません」となります。

ipconfig /flushdns すると一時的につながりますがブラウザを終了するとまた接続できません。ルーターの設定が間違ってると当たりをつけますが原因は見当もつかないので現状、お手上げです。

しばらくKaspersky のファイアウォールでFirefox を許可。Web トラフィックのスキャンの除外リストに登録して様子見です。

[設定] – [カスペルスキー ファイアウォールの設定] – [アプリケーションルールの設定]

[アプリケーションネットワークルール] – [信頼するアプリケーション] から[Firefox]

[アプリケーションの動作を監視しない] [子アプリケーションの動作を監視しない]

チェックを入れて [OK]。[設定] – [Web保護の詳細設定] – [危険サイト診断] – [除外リスト] と

[信頼するWeb サイトの設定] のそれぞれの例外リストに登録。一時しのぎで原因特定できていないので恥さらしですが完敗です。ああ~あああ~高降参年生~♪

MySQL のパスワードリセット

ブログを更新するときにWordpress のパスワードファイルを、バックアップを取らずに削除した所ログイン出来なくなりました。過去ログから以前に助かったデータベースに接続する方法でリセットしようとしましたが、MySQL のパスワードも失念。

まず順序どおりに MySQLでrootパスワードを忘れた場合の対処方法 からroot のパスワードをリセット・・・しようとするとエラー。

# ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Google 先生に聞くと MySQL 5.7.6でroot用パスワードが変わらなくて困った話  で解決できたのでシェアしておきます。

次に、MySQL にroot でログインしてWordpress のデータベースに接続、ユーザーパスワードの再設定をして助かりました。

シェルを触るのひさびさだったので、色々テンパりました。(汗