強弱と高低

Python3をメインに

Python3 たくさんのファイルをn個ずつZipする

目的

たくさんのテキストファイルを幾つかの束にしてZipにする

入力:たくさんのテキストファイ
出力:指定の数だけ束になったZipファイル

方法

まず、ファイルのディレクトリ構造付きで列挙したテキストファイルを用意する。 そして、1行ずつ読み込んでリストに。

file_list = ["./data/1.txt", "./data/2.txt", ..]

こんな感じ。肝はこれをn個ずつサブリストに分割すること。

ここが実に分かりやすかった。 リストをn個ずつのサブリストに分割 (Python) - おぎろぐはてブロ

分割するのはいいけれど、余った(10個ずつっていうときに最後が3つしかない)場合捨てられてしまうことがあったことに気をつけたい。

使えたのが

import itertools
splitsize = 1000
for a in itertools.zip_longest(*[iter(file_list)* splitsize]
    # execute

そして、for毎にZIPにするわけだが、これは標準装備であるので助かった。

import zipfile

zipFile = zipfile.ZipFile("./1.zip", "s", zipfile.ZIP_DEFLATED)
zipFile.write("./data/1.txt")
.
.
.

こんな具合だ。このZIPファイルにも連番をつけたいならば、for毎に1を加算して・・・という方法が良いだろう。ZIPが何個になるかなんて予想はたつけど無理があるので。

組み合わせればもう完璧にできる。放っておけばZIPになってるなんてさすがって感じですね。あとGUIで余裕で動くフォルダサイズの場合は、こんなん書くより速いと思う。大体GUIが動かねえっていう2GBくらい超えないと使ってもおいしくない。手段と目的を混同させてはいけないからね。

Python3 である曜日のリストを得る

目的

何月かのある曜日を得る

例えば、2016年5月の金曜日が何日なのか

方法

ある曜日の第1週が何日なのかわかれば7足していけばOK、なのはわかるけれど・・・

モジュールを使いたかったので、

import calendar

cal = calendar
for x in cal.monthcalendar(2016, 5):
    print(x[4]) # 月曜 == 0

結構簡単にできた。7足していくのはちょっと読みにくいし。

詳細はドキュメントで。 8.2. calendar — 一般的なカレンダーに関する関数群 — Python 3.5.1 ドキュメント

DELL Inspiron 14 3000のWindows10をUbuntuで抹殺した後蘇生させた

目次

  • DELL PCを買ってデュアルブートした
  • Ubuntuで音が出ない!?
  • Ubuntuを再インストール
  • Windows10を抹殺
  • Windows10ディスクイメージをDELLからDL
  • このイメージをUSBに焼くが。。。
  • USBにマウントしてブート
  • 流れ作業の末(戦後処理)
  • そして、これから

DELL PCを買ってデュアルブートした

DELLのInspiron14 3000シリーズを購入し、Windows10と共存させる形でUbuntu14.04LTSを入れた。この作業は慣れていたのですんなりといけた。ここまでは何も問題はなかった。。。

Ubuntuで音が出ない!?

なぜか、なぜか音が出なかった。ググりながらpavucontrolとか入れてみてなぜかを突き止めようとしたけれど、ダメだった。HDMI出力になっているだけかと思って期待していたのに、変えても何も変化なし。挙句の果てにはoutputがスピーカーになっていながらもRUNNINGを確認。絶望。

Ubuntuを再インストール

そうだ! そうだ!(あまりに古いネタ)

Ubuntuを再インストールしてみようと決断し、USBを差しながら適当にOKを進めた。

Windows10を抹殺

Ubuntu14.04を削除して再インストール、これを選択した。Ubuntuだけが消えるものだとばかり思っていたのが運の尽き。インストールが完了して再起動するとGRUBが起動しない(汗)Windows10が完全に跡形もなく抹殺されていた。さらばWindowswww とはいかずやっちまったの一言。

なぜやっちまった、、、、なのか。Win10も入れなおせばいいじゃんと思うかもしれない。しかし!これは!弟の!PC!なのだ!しかも実験データが入っていたらしい。無事爆死。

Windows10ディスクイメージをDELLからDL

DELL > 製品別のサポート > 製品サポート > > サービスタグを送信 > ドライバおよびダウンロードを開く

OSの変更というのがあるのでWindows10に変更。するとオペレーティングシステムというのが下に現れる。 f:id:Accent:20160421113833p:plain

そこからWindowsリカバリイメージのダウンロードをクリック。そこからは画面通り。

Microsoft Windowsのリカバリイメージのダウンロードという直接リンクのもあるんだけど、そのときのダウンロードシステムの挙動がどうもおかしいので避けたほうがいいかも。

このイメージをUSBに焼くが。。。

USBメディアを使う方法を参考にした。そこには、f:id:Accent:20160421141434p:plain

上のように書いてあるんだが、これに従ったら11から実行できなくなってUSBが使用不可になったままフォーマットできなくなった。オプションが違うとか言われた。そうなったUSBはファイルシステムでは認識できず、右クリックした後にフォーマット、なんてことはできない。ここは落ち着いて「ディスクの管理」から該当のUSBをフォーマットした。ディスクの管理はWindows標準の機能らしいので、それぞれのバージョンに従ってググれば起動の仕方もわかると思う。

そのとき、USBが変なものでフォーマットされていたので、一度削除してからFAT32でフォーマットした。それで上手くいった。

USBにマウントしてブート

これの流れはDELLさんに説明を丸投げ

OS再インストール手順参照

流れ作業の末(戦後処理)

起動すること6時間、なんか色々と画面が切り替わったりした。朝起きても「もうすぐで完了します」の文字が画面を覆う。完了した果て、きっと苦しむであろう

  • 日本語フォントがない
  • 日本語入力ができない
  • USキーボードになってる(汗)

についてはWindows Updateをするとすぐ解決できることがわかった。

  1. 日本語フォントがない
    [設定] > [時刻と言語] > [地域と言語] でなんとフォントのDLというボタンがある。従ってDLすれば解決できる。日本語部分が■になる恐怖から解放☆

  2. 日本語入力ができない
    Win Updateをするとできるようになります。

  3. USキーボードで認識されてしまう
    Windows UpdateをするとWindows 10で日本語キーボードが101英語キーボードと認識されてしまう問題 こちらの対処方法2の①でらくらくイケる。Updateするとハードウェアキーボードレイアウトがある。

そして、これから

Ubuntu16.04が出るそうなので、少し待ってみようと思う。待って、それから音が出るようにしてみたいと思う。あれだけはドライバ書かなきゃだめなのかな。。。。

超ド級のポイントを突くSublime3 スニペットの作成方法

Sublimetext3のスニペットの作り方

既に解説されたサイトはたくさんあります(汗)

webdesign-workbook.com

nelog.jp

sublimetextのスニペットのメモ · GitHub

liginc.co.jp

ここにある素晴らしい記事を読めばスニペットがいかに使えるかは、わかります。

スニペットを作成するフローに着目したい

<snippet>
    <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <!-- <tabTrigger>hello</tabTrigger> -->
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.python</scope> -->
</snippet>

こういうものが出てくる。の中身を書き換えればよいのはご承知の通り。しかし、なぜかの中身を変えてもうまくいかない。

簡単なことで、コメントアウトが外れていないからだw

みな、常識のようにしているけれど、<!-- -->コメントアウト

<snippet>
    <content><![CDATA[
print("hello")
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>hello</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.python</scope> -->
</snippet>

こうしなければTab補完がきかない

PythonでMySQLを使うときに参考にしたサイト(備忘録)

github.com

[Python] MySQLに接続してデータ操作を行う - YoheiM .NET

紹介マニアどらふと版: Python の MySQL ドライバはどれを利用すれば良いのか

Bi:Bo: PythonでのDB処理(MySQL)

個人的には、返される# => {'name': 'Cookie', 'id': 3}の値を使うところで困っていた。こんなデータ形式は扱ったことがなかったので。。。。 配列みたいに扱えると知ったのは、最後に紹介したリンク先のページ。

あのデータ形式JSONじゃない(JSONダンプできなかったw)ならなんて言うんですかね。

CheckiO The end of other

自分の解答

def checkio(words_set):
    counter=0
    for i in sorted(words_set):
        for j in sorted(words_set):
            if i.endswith(j) and i!=j:
                counter+=1
            else:
                pass
    if counter>=1:
        return True
    else:
        return False

プロの解答

def checkio(words):
    """
    You can iterate throught set.
    """
    for w1 in words:
        for w2 in words:
            if w1 != w2 and (w1.endswith(w2) or w2.endswith(w1)):
                return True
    return False

振り返り

endswith()を見つけられたのは良かった。in演算子とかfind()とかも見たけれどバッチリのがあって助かった(?)
美しくないとかわかっていたけれど、counter変数を用意してしまった。orでj.endswith(i)i.endswith(j)を結べばよかったのだな。

使ったメソッド

str.endswith(suffix[, start[, end]])
文字列が指定された suffix で終わるなら True を、そうでなければ False を返します。 suffix は見つけたい複数の接尾語のタプルでも構いません。オプションの start があれば、その位置から判定を始めます。オプションの end があれば、その位置で比較を止めます。 (http://docs.python.jp/3/library/stdtypes.html?highlight=find#str.endswith)

組み込み関数 any

any(iterable)

iterable のいずれかの要素が真ならば True を返します。iterable が空なら False を返します。 (http://docs.python.jp/3/library/functions.html?highlight=any#any)

なるほど、orで繋ぐのが要らなくなるのか。