普通のシステムエンジニアの備忘録

きみひで と言います。個人勉強で触れた技術など備忘禄と時々日常を綴ります。

codepenのテスト

codepenなるサービスをちょまどさんが利用してたので、まねして使ってみる。

 

オンライン上で書いたコードがこんな感じで共有と実行できる。

 

 

 

便利な時代になったもんだ。

SFTP パスワードなしにするやり方で困ったときの話

仕事でSFTPを使うことになったので、家のPC2台使って遊んでた。

パスワード入力してログインするまではスルッと出来た。

そのまま秘密鍵・公開鍵作って、渡して終わり~っておもってたが、そこで行き詰る。

権限が悪いのか・ファイル名が悪いのか・configとかの設定が悪いのか。

上手くいくと思ったら止まる、これまさに開発あるある。

 

で、最終的な勘違いポイントは、鍵を作るのはサーバ側だと思ってた点でした。

ssh-keygenコマンドをクライアント側で実行し、作成したKeyをサーバに渡してあげると、無事にパスワードなしで接続することが出来ました!

 

勘違いを気づかせてもらったページ

sftpのパスワードなしでログイン -sftpのパスワードなしで自動化をした- UNIX・Linux | 教えて!goo

(この質問者さんもまさに自分と同じ勘違いをしていらしたw)

 

全体的に参考にさせてもらったページ

クライアントとサーバーで公開鍵認証を使用した SFTP のセットアップと動作確認を行う - SFTP - Tips - ソーサリーフォース (sorceryforce.net)

 

 

最後にpowerShellで以下のようなSFTPコマンド実行したところ無事にputできた。

echo "put C:\Users\user\.ssh\test.txt file.txt" | sftp username@server

 

なんとかお仕事でも無事に進められそうです。

Python CSVから特定のデータを抜き出してエクセルに書きこむ

備忘禄

あるシステムの作業実績データのCSVを抜き出せるが、データが余分な人のデータまで抜き出してしまう。必要な行の必要な項目だけまとめたCSVを抽出する。

DBをRead権限で参照させてほし・・・・

 

import openpyxl
import pprint
import os
import csv


SheetName = "Sheet1"
caseNameColumn = "A"


####書き出しエクセルの情報
#書き出すエクセルファイル
resultFileName = 'output.xlsx'
resultFile = openpyxl.load_workbook(resultFileName)
# シートを取得
sheetResult = resultFile['Sheet1']
#カラム
name          = "A"
month         = "B"
project       = "C"
yoteikosu     = "D"

resultCount = 1

#とりあえず20行分まわす
for num in range(20):
  caseGyo = str(num + 1)
#  print(caseGyo)
  caseName = caseNameColumn + caseGyo
  wb = openpyxl.load_workbook("対象.xlsx")
  sheet = wb[SheetName]
  cell1 = sheet[caseName]
  if (cell1.value == None):
     break
  print(cell1.value)
  #------------
  csvfile = open("data.csv", 'r')
  reader = csv.reader(csvfile)
  for row in reader: 
    if (cell1.value == row[0]):
      resultCount = resultCount + 1
      print("csv",row[3], " " , resultCount)
      sheetResult[name       + str(resultCount)] = row[0]
      sheetResult[month      + str(resultCount)] = row[0]
      sheetResult[project    + str(resultCount)] = row[1]
      sheetResult[yoteikosu  + str(resultCount)] = row[2]

      # 保存する
      resultFile.save(resultFileName)

Python 複数の同じフォーマットのエクセルから特定のセル情報を抜き出す

備忘禄

 

複数の規定フォーマットエクセルから、特定セルを抜き出すコード

不具合票のブックが大量にあるときに利用

 

##############################################
#
# 出力結果
# PGID、 ステータス、記載日、起票者、タイトル、説明
##############################################
import openpyxl
import pprint
import os

###読み込むエクセルの情報
#Sheet名
sheetName = "Sheet1"
#取得項目のセル
cellIDfoldorColumn     = "A1"
cellIDpgidColumn       = "B1"
cellIDstatusColumn     = "C1"
cellIDdateColum        = "D1"
cellIDpersonColum      = "E1"
cellIDtitleColum       = "F1"
cellIDdiscriptionColum = "G1"

####書き出しエクセルの情報
#書き出すエクセルファイル
resultFile = openpyxl.load_workbook('out.xlsx')
# シートを取得
sheetResult = resultFile['Sheet1']
#カラム
foldorColumn     = "A"
pgidColumn       = "B"
statusColumn     = "C"
dateColum        = "D"
personColum      = "E"
titleColum       = "F"
discriptionColum = "G"
filenameColum    = "H"

count = 0
#検索対象のフォルダ
folder1 = "wk2/"

files = os.listdir(folder1)
for fol in files:
    path = os.path.join(folder1, fol)
    if os.path.isdir(path):
#      print("[folder]", fol)
      files2 = folder1 + fol + "/"
      path2 = os.listdir(files2)
      for f in path2:
          count = count + 1 
#          print(path2)
          wb = openpyxl.load_workbook( path + "/" + f) 
          sheet = wb[sheetName]
#          cell1 = sheet[cellIDfoldorColumn]
#          print(f, ",",  cell1.value )
          sheetResult[foldorColumn    + str(count)] = sheet[cellIDfoldorColumn    ].value
          sheetResult[pgidColumn      + str(count)] = sheet[cellIDpgidColumn      ].value
          sheetResult[statusColumn    + str(count)] = sheet[cellIDstatusColumn    ].value
          sheetResult[dateColum       + str(count)] = sheet[cellIDdateColum       ].value
          sheetResult[personColum     + str(count)] = sheet[cellIDpersonColum     ].value
          sheetResult[titleColum      + str(count)] = sheet[cellIDtitleColum      ].value
          sheetResult[discriptionColum+ str(count)] = sheet[cellIDdiscriptionColum].value
          sheetResult[filenameColum   + str(count)] = f

          # 保存する
          resultFile.save('out.xlsx')

powershellでファイル作ってZIP圧縮

ほんとに備忘禄

 

 

$formatted_date = (Get-Date).ToString("yyyyMMddHHmmss")
 
mkdir $formatted_date


#仮のファイル作成
Write-Output test | Out-File .\$formatted_date\test.txt

#圧縮
Compress-Archive -Path $formatted_date -DestinationPath .\test\$formatted_date

 

Github Issueの内容をCSVに出力

GithubのIssuesを一覧出力(Excel参照可能)する | SEの徒然旅ブログ (ujise.com)

こちらの記事を参考にさせていただきました。

 

 

Pythonで記述

 

ー-------------------

import json
import requests
import os
import pandas as pd
 
def main():
    os.environ["no_proxy"] = "localhost"
    token = ""
    # トークンを設定している場合は以下のtokenをurlの末尾に + toeknで付与する。
    # token = "?access_token=生成されたtokentoken"
    url = "https://api.github.com/repos/SatoKimihide/IssueTest/issues?state=all"
    response = requests.get(url, verify=False)
    json_dict = json.loads(response.text)
 
    csv_header = ["No","ステータス","アサイン","ラベル", "title", "内容", "コメント"]
    csv_body =
 
    cnt = 1
    for issue_items in json_dict:
        csv_line_body =

        csv_line_body.append(str(cnt))
        csv_line_body.append(issue_items["state"])
        
        if len(issue_items["assignees"]) != 0:
            assignees_str = ""
            for assignees_items in issue_items["assignees"]:
              assignees_str = assignees_items["login"] + ":" + assignees_str
            csv_line_body.append(assignees_str)
        else:
            csv_line_body.append("")

        
 #       csv_line_body.append(issue_items["labels"])
        if len(issue_items["labels"]) != 0:
            labels_str = ""
            for labels_items in issue_items["labels"]:
              labels_str = labels_items["name"] + ":" + labels_str
            csv_line_body.append(labels_str)
        else:
            csv_line_body.append("")
 
 
        csv_line_body.append(issue_items["title"])
        csv_line_body.append(issue_items["body"])

        if issue_items["comments"] > 0:
            url = issue_items["comments_url"] + token
            comments_response = requests.get(url, verify=False)
            comments_json = json.loads(comments_response.text)
            comment_str = ""
            for commnet in comments_json:
                comment_str = commnet["updated_at"] + "\n"+ commnet["body"] +  "\n\n" + comment_str
 
            csv_line_body.append(comment_str)
        else:
            csv_line_body.append("")
 
        csv_body.append(csv_line_body)
 
        cnt = cnt + 1
 
    df = pd.DataFrame(csv_body, columns=csv_header)
    df.to_csv("output.csv", index=False)
 
if __name__ == '__main__':
    main()

import json
import requests
import os
import pandas as pd
 
def main():
    os.environ["no_proxy"] = "localhost"
    token = ""
    # トークンを設定している場合は以下のtokenをurlの末尾に + toeknで付与する。
    # token = "?access_token=生成されたtokentoken"

 #↓のXXXXXXはアカウント名。ZZZZZZはレポジトリ名
    url = "https://api.github.com/repos/XXXXXX/ZZZZZZ/issues?state=all"
    response = requests.get(url, verify=False)
    json_dict = json.loads(response.text)
 
    csv_header = ["No","ステータス","アサイン","ラベル", "title", "内容", "コメント"]
    csv_body =
 
    cnt = 1
    for issue_items in json_dict:
        csv_line_body =

        csv_line_body.append(str(cnt))
        csv_line_body.append(issue_items["state"])
        
        if len(issue_items["assignees"]) != 0:
            assignees_str = ""
            for assignees_items in issue_items["assignees"]:
              assignees_str = assignees_items["login"] + ":" + assignees_str
            csv_line_body.append(assignees_str)
        else:
            csv_line_body.append("")

        
 #       csv_line_body.append(issue_items["labels"])
        if len(issue_items["labels"]) != 0:
            labels_str = ""
            for labels_items in issue_items["labels"]:
              labels_str = labels_items["name"] + ":" + labels_str
            csv_line_body.append(labels_str)
        else:
            csv_line_body.append("")
 
 
        csv_line_body.append(issue_items["title"])
        csv_line_body.append(issue_items["body"])

        if issue_items["comments"] > 0:
            url = issue_items["comments_url"] + token
            comments_response = requests.get(url, verify=False)
            comments_json = json.loads(comments_response.text)
            comment_str = ""
            for commnet in comments_json:
                comment_str = commnet["updated_at"] + "\n"+ commnet["body"] +  "\n\n" + comment_str
 
            csv_line_body.append(comment_str)
        else:
            csv_line_body.append("")
 
        csv_body.append(csv_line_body)
 
        cnt = cnt + 1
 
    df = pd.DataFrame(csv_body, columns=csv_header)
    df.to_csv("output.csv", index=False)
 
if __name__ == '__main__':
    main()

ー-------------------

 

作成したCSVイメージ

f:id:kimihide1104:20220219001910p:plain

 

APIのパラメータ設定(urlの部分)で、出力する条件を指定できる。

ラベルとかアサインなどの複数項目が設定できるところは、上記の方法で記載すれば取れる。

 

pipコマンドがつかえない

ど忘れして、思い出すまでに時間がかかったので備忘録

 

windowsコマンドプロンプトでpipコマンドを実行したが以下の状態になった

 

f:id:kimihide1104:20220218224631p:plain

 

先日まで出来てたけどなぁ。

 

と思ってたけど、思い違い。

pipのパスが通ってない場合は、以下のようにする必要がありました。

py -m pip install XXXX

XXXXがインストールしたいファイル

 

 py -m pip install