条件指定付きの順列作成

# 組合せチェック

def data_check(head):

    data = [1, 2, 1]

    n_head = len(head)
    n_data = len(data)

    n = n_head if n_head < n_data else n_data

    if head[:n] == data[:n]:
        return True
    else:
        return False


def perm(head, rest):

    # 条件確認
    if not data_check(head):
        return None

    if len(rest) == 0:
        return [head]

    else:
        result = []

        # set(集合)型で重複を削除、ソート
        data = sorted(set(rest))

        for i in data:

            print(head)

            #配列の複製
            rest_del = rest[:]

            #指定データ削除
            rest_del.remove(i)

            #指定データ削除
            head_add = head + [i]

            # 結果
            temp = perm(head_add, rest_del)

            # 結果保存
            if temp:
                result += temp

        return result


junretsu = perm([], [1, 1, 1, 2, 2, 3])

#順列の個数
print(len(junretsu))

#順列
print(junretsu)

Pandasでグループ別にファイル保存

import pandas as pd

df = pd.read_csv("2018.tsv", sep='\t')

grouped_df = df.groupby("id")

# print(grouped_df.groups)

for id in grouped_df.groups:

    d = grouped_df.get_group(id)

    # ファイル名作成
    filename = str(id) + ".tsv"

    # ファイル保存
    d.to_csv(filename, sep='\t', index=False, header=False)

"""
    # ファイル保存
    d.to_csv(filename,
             sep='\t',
             columns=[
                 "name",
                 "address",
                 "tel",
             ],
             index=False)
"""
import pandas as pd

df = pd.read_csv("2018.tsv", sep='\t')

grouped_df = df.groupby("id")

with pd.ExcelWriter('data.xlsx', engine="openpyxl") as writer:

    for id in grouped_df.groups:

        d = grouped_df.get_group(id)

        d.to_excel(writer, sheet_name=str(id), index=False, header=False)

Yahooカレンダーをエクスポートしたい

YahooカレンダーのiPhoneのアプリには予定があるがウェブと他の端末からだと表示されない

Googleカレンダーに移りたいのだけどカレンダーの同期はできたけどエクスポートできない

www.yahoo-help.jp

caldavのicalダウンロードできないかな

Raspberry Pi buster 2019/07 初期設定

#firmwareのアップデートたまにする
sudo rpi-update

sudo raspi-config

8 Update

7 Advanced Options
    A1 Expand Filesystem
    A3 Memory Split
        16

5 Interfacing Options
    P2 SSH

4 Localisation Options
    I1 Change Locale
        ja_JP.UTF-8 UTF-8追加 - ja_JP.UTF-8 UTF-8選択
    I2 Change Timezone
        Asia - Tokyo



# ユーザー名追加
sudo adduser imabari

# sudoに追加
sudo gpasswd -a imabari sudo

#リブート
sudo reboot


#アカウントpiの削除
sudo gpasswd -d pi sudo
sudo userdel -r pi

# 時刻設定
sudo nano /etc/systemd/timesyncd.conf
NTP=ntp.nict.jp

sudo systemctl daemon-reload
sudo systemctl restart systemd-timesyncd


#リポジトリ変更
sudo nano /etc/apt/sources.list

# 変更前
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

#変更後
deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi

# SWAP無効
sudo swapoff --all
sudo apt-get purge -y --auto-remove dphys-swapfile
sudo rm -fr /var/swap

free -h

sudo nano /etc/fstab
tmpfs /tmp tmpfs defaults,noatime,nosuid 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,size=64m 0 0

sudo apt install python3-bs4 python3-requests python3-html5lib python3-lxml python3-requests-oauthlib

ダム途中

import os
import re

import requests
import twitter
from bs4 import BeautifulSoup

url = 'http://i.river.go.jp/_-p01-_/p/ktm1801070/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006'

headers = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}

api = twitter.Api(consumer_key=os.environ["DAM_CON_KEY"],
                  consumer_secret=os.environ["DAM_CON_SEC"],
                  access_token_key=os.environ["DAM_ACC_KEY"],
                  access_token_secret=os.environ["DAM_ACC_SEC"])

# 最新ツイートを取得

tweets = api.GetUserTimeline(screen_name='BotTamagawaDam')
text = tweets[0].text

# 前貯水率を抽出

m = re.search(r"(\d+\.?\d*)%", text)

# 前貯水率を数値に変換

if m:
    try:
        brate = float(m.group(1))
    except:
        brate = 0
else:
    brate = 0

r = requests.get(url, headers=headers)

if r.status_code == 200:

    soup = BeautifulSoup(r.content, 'html5lib')

    contents = soup.find('a', {'name': 'contents'}).get_text('\n', strip=True)

    # print(contents)

    # サブタイトル・単位を除去
    _temp = re.sub(r'■\d{1,2}時間履歴\n単位:千m3\n', '', contents)

    lines = [i.split() for i in _temp.splitlines()]

    result = []

    for line in lines:

        try:
            time, _rate = line
            rate = float(_rate)
        except:
            continue

        else:
            result.append({"time": time, "rate": rate})

    # 結果確認
    # print(result)

    n = len(result)

    if n:

        tw = result[0]

        # 最新3件確認

        if n > 2:

            for j in result[:3]:
                if j["time"] in ['6:00', '12:00', '18:00']:
                    tw = j
                    break

        twit = 'ただいまの玉川ダムの貯水率は{0[rate]}%です({0[time]})\n前回比{1:+.1f}ポイント\n#今治 #玉川ダム #貯水率'.format(
            tw, tw["rate"] - brate)

        status = api.PostUpdate(twit)

        print(status.text)

i.river.go.jpからダム情報と河川情報をスクレイピング

import re

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}


def scraping(url, pattern):

    r = requests.get(url, headers=headers)

    if r.status_code == 200:

        soup = BeautifulSoup(r.content, "html5lib")

        contents = soup.find("a", {"name": "contents"})

        # 水平線で分割
        html = contents.prettify().split("<hr/>")

        # 修正済みHTMLを読み込み
        text = BeautifulSoup(html[-1], "html5lib").get_text("\n", strip=True)

        # サブタイトル・単位を除去
        data = re.sub(pattern, "", text)

        # print(data)

        lines = [i.split() for i in data.splitlines()]

        res = []

        for line in lines:

            try:
                num = float(line[1])
            except:
                continue
            else:
                res.append([num] + line)

        if len(res) > 0:

            # ベース取り出し
            base = res.pop(0)

            for i in res:

                if base == i:
                    continue

                # アロー作成
                else:
                    if base[0] > i[0]:
                        arrow = "↑"
                    elif base[0] < i[0]:
                        arrow = "↓"
                    else:
                        arrow = "→"

                    return base[2], arrow

            # 前のデータなし
            else:
                return base[2], "-"

        # データなし
        else:
            return "欠損", "-"


if __name__ == "__main__":

    # ----------------------------------------
    # ダム
    # ----------------------------------------

    print("玉川ダム")

    # 流入量
    dam_in, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1801030/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006",
        r"■\d{1,2}時間履歴\n単位:m3/s\n増減\n")

    print("流入量", dam_in, arrow)

    # 放流量
    dam_out, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1801040/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006",
        r"■\d{1,2}時間履歴\n単位:m3/s\n増減\n")

    print("放流量", dam_out, arrow)

    # 貯水量
    dam_vol, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1801060/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900700006",
        r"■\d{1,2}時間履歴\n単位:千m3\n")

    print("貯水量", dam_vol, arrow)

    # ----------------------------------------
    # 河川 観測地
    # ----------------------------------------

    print("\n蒼社川")

    # 中通
    nakadori, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1201020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900400024",
        r"■\d{1,2}時間履歴\n単位:m\n増減\n")

    print("中通", nakadori, arrow)

    # 高野
    takano, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1201020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900400021",
        r"■\d{1,2}時間履歴\n単位:m\n増減\n")

    print("高野", takano, arrow)

    # 片山
    katayama, arrow = scraping(
        "http://i.river.go.jp/_-p01-_/p/ktm1201020/?mtm=10&swd=&prf=3801&twn=3801202&rvr=&den=0972900400025",
        r"■\d{1,2}時間履歴\n単位:m\n増減\n")

    print("片山", katayama, arrow)
crontab -e

8,18,28,38,48,58 * * * * python3 /home/imabari/workspace/dam-river_twit.py