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に変更。するとオペレーティングシステムというのが下に現れる。
そこからWindowsリカバリイメージのダウンロードをクリック。そこからは画面通り。
Microsoft Windowsのリカバリイメージのダウンロードという直接リンクのもあるんだけど、そのときのダウンロードシステムの挙動がどうもおかしいので避けたほうがいいかも。
このイメージをUSBに焼くが。。。
USBメディアを使う方法を参考にした。そこには、
上のように書いてあるんだが、これに従ったら11から実行できなくなってUSBが使用不可になったままフォーマットできなくなった。オプションが違うとか言われた。そうなったUSBはファイルシステムでは認識できず、右クリックした後にフォーマット、なんてことはできない。ここは落ち着いて「ディスクの管理」から該当のUSBをフォーマットした。ディスクの管理はWindows標準の機能らしいので、それぞれのバージョンに従ってググれば起動の仕方もわかると思う。
そのとき、USBが変なものでフォーマットされていたので、一度削除してからFAT32でフォーマットした。それで上手くいった。
USBにマウントしてブート
これの流れはDELLさんに説明を丸投げ
流れ作業の末(戦後処理)
起動すること6時間、なんか色々と画面が切り替わったりした。朝起きても「もうすぐで完了します」の文字が画面を覆う。完了した果て、きっと苦しむであろう
- 日本語フォントがない
- 日本語入力ができない
- USキーボードになってる(汗)
についてはWindows Updateをするとすぐ解決できることがわかった。
日本語フォントがない
[設定] > [時刻と言語] > [地域と言語] でなんとフォントのDLというボタンがある。従ってDLすれば解決できる。日本語部分が■になる恐怖から解放☆日本語入力ができない
Win Updateをするとできるようになります。USキーボードで認識されてしまう
Windows UpdateをするとWindows 10で日本語キーボードが101英語キーボードと認識されてしまう問題 こちらの対処方法2の①でらくらくイケる。Updateするとハードウェアキーボードレイアウトがある。
そして、これから
Ubuntu16.04が出るそうなので、少し待ってみようと思う。待って、それから音が出るようにしてみたいと思う。あれだけはドライバ書かなきゃだめなのかな。。。。
超ド級のポイントを突くSublime3 スニペットの作成方法
Sublimetext3のスニペットの作り方
既に解説されたサイトはたくさんあります(汗)
ここにある素晴らしい記事を読めばスニペットがいかに使えるかは、わかります。
スニペットを作成するフローに着目したい
<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を使うときに参考にしたサイト(備忘録)
[Python] MySQLに接続してデータ操作を行う - YoheiM .NET
紹介マニアどらふと版: Python の MySQL ドライバはどれを利用すれば良いのか
個人的には、返される# => {'name': 'Cookie', 'id': 3}
の値を使うところで困っていた。こんなデータ形式は扱ったことがなかったので。。。。
配列みたいに扱えると知ったのは、最後に紹介したリンク先のページ。
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で繋ぐのが要らなくなるのか。