<tempfile, Python> ファイルからの読み出しはseek(0)がいる。

テンプファイルtempfileを使った時にちとはまったので、メモ。
tempfileを使って、一時的なファイルを作成し、その内容を読みだす場合、seek(0)しないといけん。

なんにもしないと、、

In [1]: import tempfile

In [6]: with tempfile.TemporaryFile(prefix='tempfile') as f:
   ...:     f.write('hogehoge'.encode('utf-8'))
   ...:     r = f.read()
   ...:     print(r)
   ...:     
b''

てな感じで返ってこない。

で、seek(0)すると、

In [7]: with tempfile.TemporaryFile(prefix='tempfile') as f:
   ...:     f.write('hogehoge'.encode('utf-8'))
   ...:     f.seek(0)
   ...:     r = f.read()
   ...:     print(r)
   ...:     
b'hogehoge'

やっほーう。 返ってきたよ!

ふと、、リードread()した結果は、バイトbyteっぽいから、デコードdecodeしてみた。

In [8]: with tempfile.TemporaryFile(prefix='tempfile') as f:
   ...:     f.write('hogehoge'.encode('utf-8'))
   ...:     f.seek(0)
   ...:     r = f.read()
   ...:     print(r.decode('utf-8'))
   ...:     
hogehoge

お世話になったところ。
tempfile – 一時的なファイルシステムリソースを作成する - Python Module of the Week

<datetime, Python> 文字列をパースしてdatetimeオブジェクト作って、エポックタイムにする。

過去記事の書き換え&再投稿。

文字列stringをパースparseしてdatetimeオブジェクト作って、エポックタイムepoc timeにする。

In [1]: from datetime import datetime as dt

In [2]: dt.strptime('07-25-18 14:25', '%m-%d-%y %H:%M')
Out[2]: datetime.datetime(2018, 7, 25, 14, 25)

In [3]: import time

In [4]: dt.strptime('07-25-18 14:25', '%m-%d-%y %H:%M').timetuple()
Out[4]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=25, tm_hour=14, tm_min=25, tm_sec=0, tm_wday=2, tm_yday=206, tm_isdst=-1)

In [6]: int(time.mktime(dt.strptime('07-25-18 14:25', '%m-%d-%y %H:%M').timetuple()))
Out[6]: 1532496300

epochtime/unixtimeにするには、

import time
int( time.mktime ( d.timetuple() ) )

か、

import dateutil.parser as parser
parser.parse( day )

でいける。 これで float daysフォーマット (0001-01-01 UTC から始まる日付カウント)になる。

過去記事。
nekoyukimmm.hatenablog.com

参考。
qiita.com

<pip, Python> SSLerrorしても、無理やりインストールする。

Proxy環境化で、SSL Errorがでて、pip installがこけた時でも、無理やりインストールする。

> pip install pyvirtualdisplay
Collecting pyvirtualdisplay
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /packages/39/37/f285403a09cc261c56b6574baace1bdcf4b8c7428c8a7239cbba137bc0eb/PyVirtualDisplay-0.2.1.tar.gz

-trusted-hostを使う。

>pip install --trusted-host files.pythonhosted.org pyvirtualdisplay

いつも使うなら、~/.pip/pip.confに下記と書き込めばいいらしい。

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

いつものタフガイStackoverflow

stackoverflow.com

<Python> OSをチェックする。

土台のOSをチェックする。

In [5]: import platform

In [6]: platform.system()
Out[6]: 'Windows'

In [7]: os.name
Out[7]: 'nt'

マニュアル。
16.14. platform — 実行中プラットフォームの固有情報を参照する — Python 3.6.5 ドキュメント

<conda, Python> 環境の名前を変える。

名前を変えたい。
一旦、環境を新しい名前でコピーしてから、古いのを削除するらしい。

>conda create -n NEW --clone OLD
>conda remove -n OLD --all

やってみた。

>conda env list
# conda environments:
#
hoge         /home/my_python/hoge
hage         /home/my_python/hage
root        * /home/bin/python

>conda create -n myhage --clone hage

>conda remove -n hage --all

>conda env list
# conda environments:
#
hoge         /home/my_python/hoge
myhage    /home/my_python/myhage
root        * /home/bin/python

paper.hatenadiary.jp

<conda, Python> 自分のenvsを追加する。

自分のや、他の人が作った、envsを追加して、conda env listで表示する。

.condarcに次を下記のように書き込む。

>more ~/.condarc
envs_dirs:
  - ~/my-envs
  - /opt/anaconda/envs

マニュアル。
https://conda.io/docs/user-guide/configuration/use-condarc.html?highlight=condarc#specify-environment-directories-envs-dirs