投稿

1月, 2017の投稿を表示しています

重複ファイルを一覧化

無秩序にとりあえずファイルを格納していたフォルダを整理するため、重複したファイルを一覧表示してみた。 目次 ソース 補足説明 残課題 ソース import os import csv import hashlib from collections import defaultdict root_path = 'C: \\ Path \\ to \\ Dir ' csv_file_name = 'list_duplicated_files.csv' file_dict = defaultdict( list ) for root , dirs , files in os.walk(root_path): for file in files: path = os.path.join(root , file) try : with open (path , 'rb' ) as f: key = hashlib.md5(f.read()).hexdigest() file_dict[key].append((root , file , os.path.getsize(path))) except PermissionError : print ( 'Permission denied:' , path) except UnicodeEncodeError : print ( 'UnicodeEncodeError:' , path) with open (csv_file_name , 'w' , newline = '' , encoding = 'utf-8' ) as csv_file: writer = csv.writer(csv_file) for key , values in filter ( lambda item: len (item[ 1 ]) > 1 , file_dic

iCloud容量枯渇時の対処法(iCloud上の写真をダウンロード&削除)

イメージ
iCloudにバックアップしている写真、動画が5GB近くになっているようで、愛用のiPod touchにポップが頻繁に表示される。意図的にiCloudを利用していたわけでもないので、バックアップ出来なくなってもよいかと、最初は無視していたが、頻繁に表示されるのが余りにも鬱陶しいため対処した。 目次 困ったこと やりたいこと ググってみた iCloudにバックアップされた写真のダウンロード方法 OneDrive経由で同期した写真とiCloud経由で同期いた写真で情報の欠落がないか確認 結論 困ったこと 定期的にiPodに以下の通りポップアップが表示される。また、PCにもiCloudアプリをインストールしているのでPCにも頻繁にワーニング的なメッセージが表示されるのでとにかく鬱陶しい。 やりたいこと 私は別のMSのストレージクラウドOneDriveでiPodで撮影した写真はPCに同期される仕組みにしているので、iCloud上の写真はすべて削除してしまえば問題解決しそうだが、OneDriveもたまに同期されない写真があったので(現在は大丈夫かもしれないが)、念のため一旦ダウンロードして不足がないことを確認してから削除したかった。 また、OneDrive経由で同期した場合とでEXIF情報(撮影日、位置情報などの付加情報)が欠落していないか心配だったので、一応その確認もしたかった。 ググってみた 同じ事象(iCloudの容量逼迫)で困っている人は数多くいるようで、ググると関連する情報が沢山出てくる。。。が、どれもこれも写真のバックアップを無効化しましょうという内容ばかり。SEO対策しているのか、同じ内容が上位に並んで表示されるのでやりたいことが出てこない。一旦全てダウンロードしてからバックアップ無効化(削除)したいと思う人が多い気がするのだが、、、 iCloudにバックアップされた写真のダウンロード方法 しょうがないので英語サイトを検索すると以下の説明を発見。記事も2016年5月で比較的最近なので信頼度も高そう(iCloudに限らずiTunes等は頻繁にupdateして機能が変わるので)。 How to Download Photos from iCloud to Mac or Windows PC the Easy

Bloggerではページ内リンクが作成不可?

他のブログに習って目次を作りたいと思い試行錯誤していたところ、どうやらBloggerではページ内リンクが作成できないようだ。正確には絶対パスでは作成可能だが。 目次 ページ内リンクとは Bloggerで作りこんでみると、、、 試行錯誤の結果 残課題 ページ内リンクとは 同一ページ内へのリンクのことで(もしかしたら別に正確な表現があるのかもしれないが)、htmlで書けば以下のようなことをしたい。このページにも試行錯誤の末の目次を上段に作成しているが、やりたいことはそういうこと。 <h4 > 目次 </h4> <ol > <li><a href= "#001" > コンテンツ1 </a></li> <li><a href= "#002" > コンテンツ2 </a></li> </ol> <p> サイト内リンクの作り方 </p> <h4 id= "001" > コンテンツ1 </h4> <p> 先ずはhogehoge... </p> <h4 id= "002" > コンテンツ2 </h4> <p> 次にmogamoga... </p> 例えばこの場合、コンテンツ1というリンクをクリックすると、h4タグのid属性001へ移動する仕組みだ。 Bloggerで作りこんでみると、、、 Blogger上で上記の仕組を作ろうとした場合、HTMLエディタに切り替えて作業する必要があるので直にHTMLを記述して(実際にはPythonスクリプトで処理したのだがそれはまた別記事で)、idを埋め込んだり目次のリストを記述してみた。出来上がって実際に表示してみると何故かリンクがうまく動作しない(編集画面が表示される)。確認のため、HTMLエディタに戻ってみたところHTMLがこんなことに、、、 <h4> 目次 </h4> <ol

指定フォルダ以下のフォルダ内サイズを一覧表示

空フォルダややたらとサイズが大きいファイルを格納しているフォルダを探す時に、フォルダ内の合計ファイルサイズを確認したい時がある。1フォルダであればフォルダのプロパティから確認できるが、複数を確認しようとすると面倒。Linuxならduコマンドをシェルで適当に回して確認するが、Windowsだとツールを入れないと一括では調べられない。 この目的だけであればフリーツールもたくさんあるが、あとで別プログラムで利用したかったので、Pythonで自分で書き起こしてみた。 目次 ソース 補足 ソース import os class Dirs : class DirInfo : def __init__ ( self , root , dirs , files): self .root = root self .dirs = dirs self .files = files self .depth = root.count(os.path.sep) self .num_files = len (files) self .num_dirs = len (dirs) self .sum_size = sum (os.path.getsize(os.path.join(root , file)) for file in files) def __init__ ( self , root_path): self .dict_dirs = {root: Dirs.DirInfo(root , dirs , files) for root , dirs , files in os.walk(root_path)} for di in sorted ( self .dict_dirs.values() , key = lambda di: di.depth , reverse = True ): for child_dir in di.dirs: child_di = self .di

モジュール内モジュール(?)のインポート方法

Web系のサンプルコードでurllib2モジュールの利用をよく見かけるが、これはPython2系のモジュールで、Python3系ではurllibに変更・まとめられているため、そのまま記述するとエラーになってしまう。 そのため、コードを少し変更することになるのだが、そもそもモジュール内モジュール(という表現で合っているのかはわからず。urllib内のresponseモジュール等のことを指してます。)のimportやfromの動作が良く分かっていなかったようで、理解のために色々試したメモ。 目次 試したこと 結論 試したこと いつもurllib2を使用しているコードを見かけると、import部分は以下の通り書き換えている。 ■元コード(Python2系用) import urllib2 上記をPython3系で実行すると以下ImportErrorとなる Traceback (most recent call last):   File "C:/path/to/sample.py", line 1, in <module>     import urllib2 ImportError: No module named 'urllib2' Process finished with exit code 1 ■修正コード(Python3系用) ※ importするモジュールは必要なものを選択(他にresponse等有り) from urllib import request 上記で困ったことは特別ないのだが、元々のPython2系用コードだと、コード内でのクラスへのアクセスは"urllib2.urlopen(req)"といった書き方になるのに対し、修正コードでは"request.urlopen(req)"といった書き方になり、このurlopenというメソッドが、コード内ではurllibモジュールであることが明示しないで記述される。 コード内でもurllibモジュール内の(request内の)urlopenであることを明示させたいと思い、以下のimport文に変更してみるとエラーになってしまった。urllibをインポートしただけで

写真のGPSタグ(位置情報)をCSV出力

最終的にはGPSタグをつけ忘れた写真にGoogle location historyの位置情報を付加したいのだが、今回は写真情報からGPS情報をCSV出力してみた。 目次 ソース 補足説明 ソース import os import piexif import csv import datetime class placetime ( object ): def __init__ ( self , exif_dict ): self .btime = exif_dict [ 'Exif' ][piexif.ExifIFD.DateTimeOriginal] self .time = datetime.datetime.strptime( self .btime.decode( 'utf-8' ) , '%Y:%m:%d %H:%M:%S' ) if len ( exif_dict [ 'GPS' ]) > 0 : self .longitude = \ exif_dict [ 'GPS' ][ 1 ] , \ # N/S exif_dict [ 'GPS' ][ 2 ][ 0 ][ 0 ]/ exif_dict [ 'GPS' ][ 2 ][ 0 ][ 1 ] , \ # hour exif_dict [ 'GPS' ][ 2 ][ 1 ][ 0 ]/ exif_dict [ 'GPS' ][ 2 ][ 1 ][ 1 ] , \ # minute exif_dict [ 'GPS' ][ 2 ][ 2 ][ 0 ]/ exif_dict [ 'GPS' ][ 2 ][ 2 ][ 1 ] # second self .latitude = \

Google location history(JSON形式)をCSVファイルにする

前回の挫折 から、今度はJSON形式で出力したGoogle locaiton historyを、まずはCSVに吐き出すことをしてみた。時間、緯度、経度、高度以外の情報はバッサリ切り捨て。 参考サイト(コード)はこれ https://github.com/Scarygami/location-history-json-converter/blob/master/location_history_json_converter.py ソース import json import datetime import csv class placetime ( object ): def __init__ ( self , je): self .time = je[ 'timestampMs' ] self .longitude = je[ 'longitudeE7' ]/ 1e7 self .latitude = je[ 'latitudeE7' ]/ 1e7 self .altitude = je[ 'altitude' ] if 'altitude' in je else None def __lt__ ( self , other): return self .time < other.time def __str__ ( self ): return "{t} {lg} {lt} {al}" .format( t = self .ftime , lg = self .longitude , lt = self .latitude , al = self .altitude) @ property def ftime ( self ): return datetime.datetime.fromtimestamp( int ( self .time)/ 1e3 ).strftime( "%Y-%m-%d %H:%M:%S" ) @ property

Google location history のKMLデータを加工しようとpykml利用を試みるも、、、挫折

最近Google location historyというサービスを知った。Android携帯のGPSデータを記録しているようで、旅行中の移動状況が見れるので便利。 ■ google location history https://www.google.com/maps/timeline 最近写真にGPSデータを付ける設定をしていなかったようで、後付けでどうにかつけられないかと模索中。手始めに、このGoogle location historyからダウンロードできるKMLファイルの読み込み・編集を試みた記録。 KML自体はXMLファイルらしいが、KML専用のライブラリpyKMLというライブラリを見つけたので、これで編集できないか試してみた。 ■ pykml https://pythonhosted.org/pykml/index.html インストールはpipでできる https://pythonhosted.org/pykml/installation.html > pip install pykml サンプルを実行してみた。 ■ Parsing existing KML documents https://pythonhosted.org/pykml/tutorial.html > from pykml imort parser Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "C:\Users\user\AppData\Local\Programs\Python\Python35\lib\site-packages\pykml\parser.py", line 8, in <module>     import urllib2 ImportError: No module named 'urllib2' いきなりurllib2のインポートエラー。。。 Python2のライブラリインポートしようとしているということはPython3系に対応していないということか、、、 次回は標準付属のXM

土日で札幌旅行 2日目(2017/01/15) スキージャンプのワールドカップを観戦

イメージ
札幌旅行2日目。一日目は こちら 。 無計画で着た&すでに札幌旅行も数えきれないほど来ているのでやることないなーっと検索しているとスキージャンプのワールドカップをやっているとの情報にたどり着き、急遽ジャンプ台へ行くことに。 目次 宮の森ジャンプ競技場へ 円山動物園 お土産を買いにドン・キホーテへ 夕食はえびそば一幻で 成田空港から急いで京成電車終電に この旅行の記事一覧 宮の森ジャンプ競技場へ 地下鉄で円山公園へ行けば臨時のシャトルバス(210円)が出ているのでそれに乗れば連れて行ってくれる。大会があるときは臨時バスがでるらしい。 因みに、札幌の地下鉄は「ドニチカ」という当日乗り放題切符があるので、地下鉄移動が多い場合はこちらを利用するのが便利で安上がり。地下鉄自販機で購入可能。 http://www.city.sapporo.jp/st/josyaken/doni-chika/donichika.html ■ 宮の森ジャンプ競技場 初めてのスキージャンプ台に圧巻。ちなみに当日券は2,000円。 (写真は別選手だけども)高梨沙羅選手もジャンプしていました。 円山動物園 ホッキョクグマが有名な(?)動物園。園内はそれほど広い分けではないでですが、端から端まで見ていたら2時間以上滞在してました。閉演時間(冬季は16時に閉演!)なってしまい慌てて退園することに。 食事・休憩のために、園内にはカフェやレストランもあるけども、コンビニ(セブン)もあるので、入園料(600円)以外にはあまり費用が掛からずリーズナブルな印象でした。 【HP】 http://www.city.sapporo.jp/zoo/info/riyo/info.html ■ 円山動物園 入口。雪のかかり方がいい雰囲気。 バスの時刻表。今回正門から入りましたがバスは西門に来るとのこと。 園内地図。時計回りor反時計回りすれば一通り見れる配置。 雪が積もってます。 クマも寒くて室内に入りたい様子。 人に慣れすぎた鳥。50cm位まで近づきましたが逃げません。 絶妙バランスのトカゲ。 お土産を買いにドン・キホーテへ 実は前日にも訪れていたのですが、北海道産の海産物が結構売っていたので、安くお土産を買

土日で札幌旅行 1日目(2017/01/14) サケについて学ぶ

イメージ
週末で札幌旅行に行ったのでその記録とtips的な情報の整理。年に3回位は札幌に旅行するのですでに手慣れたなー 目次 事前のWebチェックイン&モバイル搭乗券 成田空港に前日入り(空港泊) 早朝(07:40)に新千歳空港着。やることがない。。。 サケのふるさと 千歳水族館へ スープカレーの名店ラマイへ ホテルにチェックイン&昼寝 海産物を食べにすすきのへ この旅行の記事一覧 事前のWebチェックイン&モバイル搭乗券 既にWebチェックインできる航空会社がほとんどだけども、できるなら事前にやっておくと空港での手続きがスムーズ。空港で手続きをしようとすると、2時間前~30分前までにチェックイン(と手荷物の預け、航空券の受け取り)を行い、25分前までに搭乗口に行く必要があるが、事前にWebチェックインを行っておけば直接搭乗口に行けばいい。 http://www.jetstar.com/jp/ja/help/articles/before-you-travel-check04 Webチェックインは通常航空券購後、2日前位にメールが届くので、そのリンクをたどっていけば完了できる。 あと、Jetstarはモバイル搭乗券という仕組みがあり、Webチェックイン後に搭乗券をプリントアウトする必要がなく、スマフォのQRコードを見せるだけ(バッテリーは注意)。 Webチェックイン手続きの最後に搭乗券を印刷するか、モバイル搭乗券かを選択できる画面があるので、モバイル搭乗券を選択すれば、リンク付きのメールが来るのでリンクを辿ってモバイル搭乗券をゲットすればいい。iPhoneならwalletというアプリに搭乗券(QRコード)が格納される。 因みに、今回Webチェックイン手続き時にモバイル搭乗券を選択しようとしたら、エラーが表示されてどうにも手続きが進められなかったので、印刷して持っていくタイプの搭乗券を選択してWebチェックイン手続きを完了としたところ、そのあとにモバイル搭乗券をゲットするのみJetstarアプリ経由でないとゲットできなかった(Webからはモバイル搭乗券をゲットする画面にたどり着けず)。 また、モバイル搭乗券はAirDropで(URLを連絡することでも)受け渡しができるので、友人の搭乗