Quantcast
Channel: いつも隣にITのお仕事
Viewing all 2097 articles
Browse latest View live

初心者でも簡単!PythonでWindowsのアプリケーションを起動する方法

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Windowsユーザー&プログラミング初心者向けに、Pythonでお仕事を快適にするツールを作り方をお伝えしています。

今回のお題はプログラムの起動です。

ほら、お仕事するときって、いろんなアプリケーション、ファイル、フォルダ、Webページといろいろと開くときあるじゃないですか。

で、毎日のようにそれらをいちいちクリックとかしたり開くの面倒ですよね。

そしたら、いつも起動する定番セットを自動で起動するようなスクリプトを作って、それをランチャーにセットしたり、タスクスケジューラにセットしたりすると、とっても便利そうです。

例えば、私の場合は以下ツイートしている通り、執筆用のセットを作りました。まあ快適です。

ということで、何回かにわたって、Windowsでいろんなプログラムを一気に起動するツールを作っていきます。

まず今回は、Pythonでアプリケーションを起動する方法です。

では、行ってみましょう!

Popen関数でアプリケーションを起動する

Pythonでアプリケーションを起動するには、subprocessモジュールのPopen関数を使います。

subprocessモジュールは標準ライブラリに同梱されていますのでインストールは不要ですが、スクリプトの最初でインポートする必要はありますね。

import subprocess

Popen関数の使い方はこちらです。

subprocess.Popen(プログラムファイル)

プログラムファイルは、pyファイルと同階層またはPATHが通っていればファイル名だけで大丈夫ですが、そうでない場合はフルパスで指定します。

また、今まで最初の文字が大文字の関数とかメソッドとか見かけなかったですが、「P」は大文字じゃないとダメです。(というか、難しい説明は端折りますが、Popenはコンストラクターというものです。)

ちなみに、「P」はProcessの「P」で、Popen関数は新しいプロセスでプログラムを実行するという動作をします。

Excelのフルパスを調べる

では、みんな大好きExcelを起動してみましょう。

ExcelはPATHは通っていませんので、フルパスを調べる必要がありますね。

まず Win キーを押して、Windowsメニューを開きます。

「ex」などと入力すると、検索結果としてExcelが登場しますので右クリック。開いたメニューから「ファイルの場所を開く」を選択します。

WindowsメニューからExcelの場所を開く

続いて、エクスプローラーでExcelが存在するフォルダにリンクしますので、そこでExcelらしきプログラムファイル(というか、ショートカットですけどね)を見つけて、右クリック。

開いたメニューから「プロパティ」を開きます。

Excelのショートカットキーのプロパティを開く

あ、もちろんランチャーやタスクバーなどにExcelのショートカットアイコンがあれば、そこからプロパティを開いてもOKですよ。

プロパティウィンドウの「ショートカット」タブを選択し、「リンク先」がプログラムファイルへのフルパスになりますのでコピーしておきます。

Excelのショートカットのリンク先をコピー

フルパスはエスケープ文字「\」だらけ

これでフルパスがわかりましたので、Excelを起動してみましょう。

スクリプトはこちら。

import subprocess
subprocess.popen('C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE')

実行をしてみると…おや?

PythonのFileNotFoundError

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

このようなエラーメッセージが表示されました。

おっと、Windowsでは「\」はエスケープシーケンスで「\\」としないといけないのでした。

ですが、フルパスには「\」は何度も出てくるので、いちいち修正するのは面倒…

raw文字列でエスケープ文字を無効にする

そんなときはraw文字列というものを使うと、文字列のエスケープ文字を無効にすることができます。

こんな風に書きます。

r‘文字列’

「r」つけるだけ。大文字「R」でもOKです。

また、シングルクォーテーションはダブルクォーテーションでもOKです。

Popen関数でExcelを起動するスクリプト

では、このraw文字列を使って、先ほどのスクリプトを修正してみましょう。

1文字加えるだけですね。

import subprocess
subprocess.Popen(r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE')

このスクリプトを実行すると、無事にExcelを起動することができました!

起動したExcelアプリケーション

まとめ

以上、PythonでWindowsのアプリケーションを起動する方法についてお伝えしました。

subprocessモジュールのPopen関数を使ってExcelを開いてみました。

VBScriptでも同様のことができますので、お好みでどうぞ!

VBScriptで複数のファイル・フォルダ・アプリケーションをダブルクリック一発で開く方法
VBScriptを使って複数プログラムを1発で開く方法を紹介しています。起動ファイルを作っておけば、業務ごとに使い分けられるのでWindowsでの業務を効率化できます。また曜日によって起動するプログラムを変えるなんてこともできます。

さて、今回はアプリケーションを開いてみましたが、次回はファイルを開いてみたいと思います。

どうぞお楽しみに!

連載目次:Pythonでいろんなプログラムをまとめて起動をする方法

お仕事でいつも使うアプリケーション、ファイル、フォルダ、Webページなどの「定番セット」を自動で起動するPythonスクリプトを作ります。とっても便利です。
  1. 初心者でも簡単!PythonでWindowsのアプリケーションを起動する方法

Google Data StudioとGoogleスプレッドシートを組み合わてレポート作成

$
0
0


こんにちは!
タダケン(@tadaken3)です。

今回はスプレッドシートのデータを使って、Google Data Studioのレポートを作成する方法をお伝えします。スプレッドシートのIMPORTHTML関数やIMPORTXML関数を使えば、WEB上にあるデータも活用でき、多彩なレポートを作ることができます。

本記事では、具体例として、日本のGDP(国内総生産)のデータを取得して、レポートを作成する方法を解説します。

GoogleスプレッドシートでGDPのデータを取得する

GDPのデータはWikipediaから取得しましょう。国内総生産のページに日本のGDPの年別データが記載されています。ここのページからスプレッドシートのIMPORTHTML関数でデータを取得します。

IMPORTHTML関数の書き方は以下のとおりです。

=IMPORTHTML(URL,クエリ,指数)

IMPORTHTML関数については、こちらの記事にて詳しく解説していますのであわせてご覧ください。

プログラミングは一切不要!スプレッドシートの関数だけでWEBサイトの情報収集を自動化する
Googleスプレッドシートの関数だけでWEB上のデータを取得する方法を解説します。本記事で取り扱うのはimporthtml関数、importxml関数の2つです。スプレッドシートだけでも簡易なスクレイピングができる方法をお伝えします。

スプレッドシートのA1セルに以下を入力しましょう。今回はwikipediaのページから表形式のデータを取得するので、クエリはtableを指定します。

=IMPORTHTML(”https://ja.wikipedia.org/wiki/%E5%9B%BD%E5%86%85%E7%B7%8F%E7%94%9F%E7%94%A3”,"table",5)

 

すると、GDPのデータがこのように表示されます。

Google Data Studioで新規レポートを作成する

続いて、Google Data Studioでレポートを作成しましょう。

基本的なやり方は、Googleアナリティクスのデータを表示する方法と同じです。こちらの記事を参考に新しいレポートを作成してみましょう。

Google Data StudioでGoogleアナリティクスのデータを表示する方法
Google Data Studioを使って、Googleアナリティクスのデータを表示する方法を解説します。本記事では、データの接続から、グラフの作成方法まで一通り紹介します。

レポート作成後は[新しいデータソースを作成]を選択します。

次に、[コネクタ]から先程作成したGDPのデータがあるスプレッドシートを選びます。さらにデータがあるワークシートを選択していき、最後に「接続」を押します。

追加されるデータの項目が表示されます。

そのまま「レポートに追加」を押します。

スプレッドシートのデータを元にグラフを作成する

まずは棒グラフを作成

では、スプレッドシートのデータを元にレポートを作成します。まずは棒グラフを作成してみましょう。ディメンジョンに「暦年」、指標に「名目GDP」と「実質GDP」を追加してみましょう。

するとこんなグラフができたかと思います。

時系列データなので、折れ線グラフのほうがわかりやすいですね。右のカラムにある折れ線グラフを選択して、グラフを変更してみましょう。

あれれ、おかしいですね。うまくグラフが表示されません。ディメンジョンの箇所が「無効なディメンジョン」となっています。

フィールドにはタイプがある

実は折れ線グラフを使うには、時間データを取り扱う「時間フィールド」が必要です。

フィールドはデータの中身によって、「数値」「テキスト」「時間」などタイプが存在します。タイプによって、グラフに使えるディメンジョンや指標が変わってきます。

「暦年」は時間じゃないのかと思われるかもしれませんが、暦年のデータをよくみると「2016年」という形式で保存されており、データのタイプは「テキスト」となります。

スプレッドシートに戻って、データを修正するという方法もあるのですが、簡易なデータ加工であれば、Google Data Studioでもおこなうことが可能です。

Google Data Studioで「暦年」から時間を表す「year」を作成します。

新しいフィールドを追加する

データソースの横にある鉛筆マークをクリックします。

するとデータフィールドの編集画面になります。ここで新しいフィールドを作成します。青い丸で囲まれたプラスボタンをクリックします。

エクセルやスプレッドシートと同じように関数を使ってデータを加工します。使用できる関数はこちらです。

今回は暦年の「XXXX年」からSUBSTR関数で最初の4文字部分、つまり数値部分だけ取り出しましょう。

SUBSTR(暦年, 1, 4)

続いてデータタイプを変更します。作成した「year」フィールドを選択して、[タイプ]▷[日付と時刻]▷[年(YYYY)]と選択します。

データタイプを「年(YYYY)」に変更できたらか完了ボタンをクリックします。

折れ線グラフに変更する

では、先程のレポート編集画面に戻って、時間ディメンジョンに「year」を追加してみてください。今度はきちんと折れ線グラフが表示されましたね。

まとめ

今回はGoogle Data Studioで

  • スプレッドシートのデータを連携する方法
  • データのフィールドを加工する方法

をお伝えいたしました。スプレッドシートを経由することで、様々なデータをデータソースとして扱うことができます。データのタイプはきちんと設定するのを忘れないでくださいね。

次回もGoogle Data Studioのテクニックをご紹介しますね。

どうぞ、お楽しみに!

よろしければ、こちらからTwitterアカウントのフォローをお願い致します。

連載目次:簡単にダッシュボードを作るGoogle Data Studio

Google Data Studioを使えば、Googleアナリティクスやスプレッドシートを元のデータとして、サイトやブログ、事業の状況を把握するためのカッコいいダッシュボードを作ることができます。本シリーズではその基本から、便利な使い方までをお伝えしていきます。
  1. 圧倒的に見やすいダッシュボードを作成できる「Google Data Studio」が熱すぎる
  2. Google Data StudioでGoogleアナリティクスのデータを表示する方法
  3. Google Data StudioとGoogleスプレッドシートを組み合わてレポート作成

VBScriptでWEBスクレイピング!hタグを取得してHTMLとして書き出す

$
0
0

こんにちは!あつもり(@atumori17)です。

VBScriptでIEを操作してWEBスクレイピング!の第7回目で~す。
前回は「aタグのリンクURLをHTMLとして書き出す」ところまでやりました。

VBScriptでWEBスクレイピング!aタグのリンクURLをHTMLとして書き出す
ページ内にあるaタグの要素全体を抜き出してHTMLファイルとして書き出す方法を紹介します。HTMLファイルとして書き出すことでリンク集のような使い方ができるので便利です。書き出し方法はouterhtmlメソッドを使うことで、指定したタグを含めた要素全体を取得していきます。

今回は「ページ内にあるhタグを取得してHTMLとして書き出す」方法を紹介します。

前回はaタグの要素全体を抜き出しました。今回はhタグの要素全体を抜き出して、前回と同様にHTMLファイルとして書き出していきます。

hタグの要素をHTMLファイルで書き出すスクリプト

テキストエディタを開き下記のコードを入力します。全て入力し終わったら「hタグをHTMLで書き出す.vbs」のファイル名でデスクトップに保存します。

Option Explicit

    Dim objIE
    Dim objLink

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    'IEを開く
    objIE.navigate "https://tonari-it.com/"

    'ページが読み込まれるまで待つ
    Do While objIE.Busy = True Or objIE.readyState <> 4
        WScript.Sleep 100
    Loop

    'head要素の書き出し
    OutputText "<html><head><title>リンク一覧</title></head>"
    'body要素の書き出し
    OutputText "<body>"

    Dim objH1
    Dim objH2
    Dim objH3
    Dim el

    'h1~h3要素をコレクションとして取得してオブジェクト変数にセットする
    Set objH1 = objIE.document.getElementsByTagName("h1")
    Set objH2 = objIE.document.getElementsByTagName("h2")
    Set objH3 = objIE.document.getElementsByTagName("h3")

    '取得したh1~h3要素をhtmlファイルに書き出す
    For each el In objH1
        OutputText "<p>" & el.outerhtml & "</p>"
    next

    For each el In objH2
        OutputText "<p>" & el.outerhtml & "</p>"
    next

    For each el In objH3
        OutputText "<p>" & el.outerhtml & "</p>"
    next

    OutputText "</body></html>"

'テキストファイルへ出力
Function OutputText(ByVal strMsg)

    Dim objFSO
    Dim objText

    'ファイルシステムオブジェクト
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    'テキストファイルを開く
    Set objText = objFSO.OpenTextFile("hタグ.html", 8, true)

    objText.write strMsg
    objText.write vbCrLf

    objText.close

    'オブジェクト変数をクリア
    Set objFSO = Nothing
    Set objText = Nothing

End Function

プログラムコードの解説

全体の流れは以下のようになります。

  1. IEでページを開く
  2. IEの読み込み待ちをする
  3. hタグの要素をHTMLファイルとして書き出す

1~2までは前回ご説明したaタグの要素を取得する流れと同じです。その後、hタグの要素を取得してHTMLファイルとして書き出します。

hタグとは見出しを表すタグ

コードの説明に入る前にhタグについて少しお話したいと思います。hタグとは見出しを表すタグでh1~h6まであります。6種類もあるのは、

  • h1 大見出し
  • h2 中見出し
  • h3~h6 小見出し

というように用途に分けて使いわけるためです。こうすることで文書構造をわかりやすくするんですね。hタグはブラウザで表示させたときに、文字が大きく太く表示されます。そのためページ閲覧者にとって読みやすいページになるわけです。

下の画像を見てもらうとイメージがつかみやすいと思います。初心者向けにHTMLを解説したページを例にしています。

このようにhタグを適切に使うことで、閲覧者だけでなく検索エンジンに対してもわかりやすいページになるため、SEOとしての効果もあります。

実際にhタグをHTMLで書く場合は以下のようにします。

<h1>h1タグ</h1>
<h2>h2タグ</h2>
<h3>h3タグ</h3>
<h4>h4タグ</h4>
<h5>h5タグ</h5>
<h6>h6タグ</h6>

ブラウザではこのように表示されます。

それではコードの説明をしていきますね。

getElementsByTagNameメソッドでタグ名で要素を取得する

下記のようにすることでタグ名で要素を取得することができます。

HTMLドキュメント.getElementsByTagName(“タグ名”)

getElementsByTagNameはタグ名で指定した要素のコレクションを取得するメソッドです。コレクションはページ全体のh要素がまとまっているため、1つ1つの要素にバラしてあげないといけません。

上記のコードで27~28行目、32~35行目になります。

'h1~h3要素をコレクションとして取得してオブジェクト変数にセットする
    Set objH1 = objIE.document.getElementsByTagName("h1")

'h1~h3タグを取得してhtmlファイルに書き出す
    For each el In objH1
        OutputText "<p>" & el.outerhtml & "</p>"
    next

コレクションについては過去の記事「VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法」で詳しく説明しているので参考にしてみてください。

VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法
ページ内にあるリンクURLを全て取得してテキストファイルに書き出す方法を紹介します。まずはLinksプロパティでページ全体のa要素を全て取得してから、For eachステートメントでコレクションの中の要素の数だけループさせ、リンク参照先のURLを取得します。

プログラムコードの解説は以上です。

アプリケーションを実行してみる

では実際に起動してみます。デスクトップにある「リンクURLをHTMLで書き出す.vbs」をダブルクリックして起動します。

デスクトップに「hタグ.html」ができました。

「hタグ.html」をダブルクリックするとブラウザでファイルが開きます。

「hタグ.html」をテキストエディタ開いてみると、htmlで書かれているのがわかります。

まとめ

いかかでしたか?今回の内容をまとめると以下のようになります。

  • hタグとは見出しを表すタグで文書構造をわかりやすくするために使う
  • getElementsByTagNameはタグ名で指定した要素のコレクションを取得するメソッド

今回は以上です。それではお疲れさまでした~。

連載目次:VBScriptでお手軽WEBスクレイピング

Windowsを操作できるプログラミング言語「VBScript」を使えば、InternetExplorerを操作してWEBスクレイピングが可能です。 これで日々の情報収集はダブルクリック一発で完了させましょう!
  1. VBScriptでInternet Explorerを使って複数WEBサイトをダブルクリック一発で開く方法
  2. VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
  3. VBScriptでWEBスクレイピング!HTMLドキュメントとタイトルを取得する方法
  4. VBScriptでWEBスクレイピング!ブラウザの読み込み待ちをしてエラーを回避する
  5. VBScriptでWEBスクレイピング!aタグのリンクURLを全部取得する方法
  6. VBScriptでWEBスクレイピング!aタグのリンクURLをHTMLとして書き出す
  7. VBScriptでWEBスクレイピング!hタグを取得してHTMLとして書き出す

Pythonで特定のファイルをアプリケーションで開く方法とフォルダを開く方法

$
0
0
open

photo credit: C x 2 Open via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者向けにPythonでお仕事で使うプログラムをまとめて起動するツールを作成する方法をお伝えしています。

前回の記事はコチラ。

初心者でも簡単!PythonでWindowsのアプリケーションを起動する方法
Windowsユーザー&プログラミング初心者向けに、Pythonでプログラム起動ツールの作り方をお伝えしています。今回は、Pythonでアプリケーションを起動する方法です。Popen関数を使います。

subprocessモジュールのPopen関数を使ってアプリケーションを起動する方法をお伝えしました。

前回は単純にアプリケーションを立ち上げるだけでした。

そうなると、せっかくExcelやWordなどのアプリケーションを立ち上げても、新規ファイルを選択するか、いずれかのファイルを開かないと作業ができないわけです。

ですが、具体的に特定のファイルを開いて、昨日の続きから作業を開始できればありがたいときもありますよね。

加えて、作業用フォルダも同時に開けたりすると便利です。

ということで、今回はPythonで特定のファイルを開く方法とフォルダを開く方法についてお伝えします。

前回のおさらい

では、まず前回の復習から。

以下スクリプトを作りました。

import subprocess
subprocess.Popen(r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE')

subprocessモジュールのPopen関数を使って、Excelを起動するというものでした。

フルパスを調べて、文字列にraw文字列「r」を使ってエスケープを無効化するんでしたね。

今回は、単純にExcelを起動するだけでなく、Excelの特定のファイルを開いてみたいと思いますよ。

Popen関数でアプリケーションとともにファイルを開く

アプリケーションとともに、その特定のファイルを開く場合は、Popen関数にリストを渡します。

以下のように記述します。

subprocess.Popen([プログラムファイル, 開くファイル])

例えば、デスクトップにある「Book1.xlsm」を開きたいとします。

その場合、Pythonのスクリプトとしては以下のようにすればOKですね。

import subprocess
subprocess.Popen([r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE', r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'])

実行すると、指定のファイルが開きます。

しかし、いかんせん長い。一行がとてつもなく長い。

Popen関数を使ったステートメントを短くする方法

Popen関数を使ったステートメントを短くする方法をいくつか検討してみましょう。

変数を使う方法

簡単な方法としては、開くファイルのフルパスを変数に格納する方法です。

開くファイルのフルパスを、いったん変数EXCELに格納すべく、以下のように変更します。

EXCEL = r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'
import subprocess
subprocess.Popen([r'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE', EXCEL])

これはこれでよいですね。

もちろん、プログラムファイルのフルパスも変数に格納してもOKですね。

既定のプログラムでファイルを開く

拡張子が「.xlsx」であれば、ダブルクリックすればExcelでそのファイルを開きますよね。

これは、拡張子に応じて既定のプログラムが関連付けられていることによります。

Pythonではファイルに応じて既定のプログラムで開く方法がありまして、それを使えばスクリプトを短く記述することができます。

具体的には、コマンドプロンプトのstartコマンドの力を借ります。

startコマンドは、別ウィンドウでプログラムを実行するコマンドです。

start コマンド、プログラムまたはファイル

実行可能なプログラムを指定するとそのプログラムを実行しますし、ファイルを指定すると関連付けられたアプリケーションが起動します。

PythonのPopen関数では、以下のようにしてそのstartコマンドを実行することができます。

subprocess.Popen([‘start‘, 開くファイル], shell=True)

Windowsの場合は、キーワード引数shellにTrueを指定する必要があります。これにより指定のコマンドはシェルつまりコマンドプロンプトによって実行されることになります。

では、実際にスクリプトを組んで実行してみましょう。

こちらです。

EXCEL = r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'
import subprocess
subprocess.Popen(['start', EXCEL], shell=True)

だいぶスッキリしましたね!

既定のプログラムが決まっているファイルに関しては、こちらのほうがよさそうです。

Popen関数でフォルダを開く

ファイルだけではなくて、フォルダを開きたいときもありますね。

フォルダを開くといっても、Windowsでいうとエクスプローラーというアプリケーションでフォルダを開いているだけですので、これまでの応用で実現可能です。

Popen関数で、プログラムファイルにexplorerを指定してあげればよいのです。

subprocess.Popen([‘explorer‘, フォルダ])

フォルダはフォルダのフルパスを指定します。

つまり、以下のようなスクリプトになりますね。

EXCEL = r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'
FOLDER = r'C:\Users\ntaka\Dropbox\desktop'
import subprocess
subprocess.Popen(['start', EXCEL], shell=True)
subprocess.Popen(['explorer', FOLDER])

これで、Excelファイル「Book1.xlsm」とともに、デスクトップフォルダが開いてくれます。

まとめ

以上、Pythonでファイルとフォルダを開く方法についてお伝えしました。

これで、アプリケーション、ファイル、フォルダと開くことができるようになりました。

さらに、フルパスもエスケープできますし、ステートメントも多少短く書くことができるようになりました。

次回は、特定のWebページを開く方法についてお伝えしますね。

どうぞお楽しみに!

連載目次:Pythonでいろんなプログラムをまとめて起動をする方法

お仕事でいつも使うアプリケーション、ファイル、フォルダ、Webページなどの「定番セット」を自動で起動するPythonスクリプトを作ります。とっても便利です。
  1. 初心者でも簡単!PythonでWindowsのアプリケーションを起動する方法
  2. Pythonで特定のファイルをアプリケーションで開く方法とフォルダを開く方法

エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方

$
0
0

excel,vba,shapes,addpicture,repeat,eyecatch

皆様こんにちは、ノグチです。

大量の画像を、エクセルシートに、画像サイズと位置を揃えて貼り付けていく…そんな作業をしたことはありますか?

ただ貼り付けるだけならまだしも、画像はすべて横位置を揃えて!という指定があったり、フォルダにある画像のサイズはばらばらなのに、エクセルに貼り付けるときはすべて同じサイズに!なんて指定があったり…。

はっきり言って苦行ですよね。

そんな面倒なことはVBAに任せましょう!

ということで、今回はShapesコレクションのAddPictureメソッドとFileSystemオブジェクト使って、フォルダにある画像ファイルを、位置やサイズを指定して、一括で貼り付ける方法をご紹介します!

画像をまとめて貼り付けるメリット

例えばこちらのフォルダにある画像を…

excel,vba,shapes,addpicture,repeat,images

こんな風に、ワンクリックでエクセルシートへ貼り付けることができます。

前回の記事でご紹介したように、AddPictureメソッドのパラメータで貼り付ける画像のサイズや位置も指定ができるので、縦又は横に向かって一定の間隔を空けて画像を貼り付けていくことができるのです。

こんな感じで。

excel,vba,shapes,addpicture,repeat,images,all,sheet

この方法なら画像の横位置も縦位置も、画像のサイズも指定の通りに揃えられるので、人間が手動で貼り付けていくより遥かに早く、正確です。

そして何より、楽です。

フォルダの画像を一括で貼り付けるマクロ

フォルダにある画像を全てエクセルシートに貼り付けるためのVBAコードがこちら。

Sub 画像貼り付け()
Dim lngTop As Long
Dim objFile As Object
Dim objFldr As FileSystemObject

    Set objFldr = CreateObject("Scripting.FileSystemObject")

    lngTop = 20

    For Each objFile In objFldr.GetFolder(ThisWorkbook.Path & "\images").Files
        ActiveSheet.Shapes.AddPicture _
                Filename:=objFile, _
                LinkToFile:=False, _
                SaveWithDocument:=True, _
                Left:=20, _
                Top:=lngTop, _
                Width:=300, _
                Height:=200

        lngTop = lngTop + 200 + 20

    Next

End Sub

FileSystemオブジェクトとFor Each~Nextを使って、エクセルと同じ階層にある『images』というフォルダにある画像ファイルを全て、順番にエクセルシートの下方向に向かって貼り付けていくコードです。

FileSystemオブジェクトとFor Each~Next文については下記記事で紹介されていますので、併せてご覧ください。

Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてお伝えしています。今回はWord VBAでFor Each文を使ってフォルダ内のドキュメント全てを順番に開いて操作をする方法です。

画像と画像の縦の間隔は、

  1. objFileオブジェクトで取得した「images」フォルダ内の画像ファイルをシートに貼り付ける
  2. 貼り付けた画像の高さ(Heightパラメータに指定した値=200)+20ポイントを足した値を変数lngTopにセット
  3. 変数lngTopをAddPictureメソッドのTopパラメータにセット

で空けています。

そして画像のサイズもWidthパラメータとHeightパラメータに指定した数値によって200×300で統一されていますし、画像の横位置もLeftパラメータに「20」を指定しているので、ピシっと左揃えになっています。

このように面倒な画像を貼り付けていく作業も、マクロを使ってしまえば貼り付け漏れもありませんし、目視で画像の位置を揃える…なんて面倒臭い作業も不要ですよ。

ちなみに、AddPictureのパラメータの役割は下記記事で説明しています。

エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
ShapesオブジェクトのAddPictureメソッドで、エクセルのシート上に画像を追加する方法をご紹介しています。画像のサイズや位置が決まっている場合、手動で調整するのは手間なもの。エクセルVBAで位置やサイズを指定しておけば、面倒な調整が不要になりますよ。

フォルダに画像以外のファイルがあるとどうなるのか

今回ご紹介しているコードは、『images』フォルダには、エクセルに貼り付けることができる画像ファイルのみが格納されていることが前提になっています。

なので、こちらのように『images』フォルダの中身に画像以外のファイルがある状態で上述のコードを実行すると…

excel,vba,shapes,addpicture,repeat,images,anotherfiletypeこの通り、画像として処理できないファイルは「この画像は表示できません」と表示されてしまいます。

excel,vba,shapes,addpicture,repeat,images,anotherfiletype,errorこうならないためには、指定したフォルダには画像ファイルのみ保存するようにルール付けをするか、VBAのコード内で取得する画像ファイルの種類を画像ファイルに絞り込まなければいけません。

そのあたりの工夫については、次回以降の記事で紹介していきます。

まとめ

今回は、フォルダにある画像ファイルを全て、一括でエクセルに貼り付ける方法をご紹介しました。

しかし、今回ご紹介したコードには画像ファイルが格納されているフォルダのパスや、画像のサイズ、画像と画像の間隔まですべてコード内で直接指定されています。

このままでは、他のフォルダにある画像や、違うサイズで画像を貼り付けたい場合に使いまわしがききませんね。

折角作ったマクロです。どうせなら他にも使いまわせるよう、次回記事では今回ご紹介したコードを使った、汎用性を高めるための工夫をご紹介していきます。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAで図形を操作するShapeオブジェクトの使い方

画像、オートシェイプ、グラフ、テキストボックス、ワードアート、ボタン…エクセルでは様々なものをシートに配置できますが、これらのアイテムは全てShapeオブジェクトです。これら、Shapeオブジェクトの挿入や配置など、自在に操作する方法をお伝えしていきます。
  1. エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩
  2. エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
  3. 【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法
  4. エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方

【初心者向けPython】既定のブラウザでWebページを開くツールの作り方

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向けにPythonでお仕事で使うプログラムをまとめて起動する方法についてお伝えしています。

前回の記事はコチラ。

Pythonで特定のファイルをアプリケーションで開く方法とフォルダを開く方法
プログラミング初心者向けにPythonでお仕事で使うプログラムをまとめて起動するツールを作成するシリーズ。今回はPythonで特定のファイルを開く方法とフォルダを開く方法についてお伝えします。

Pythonでファイルやフォルダを開く方法についてお伝えしました。

さて、アプリケーション、フォルダ、ファイルと開くことができたので、お仕事でいつも使うやつはほとんど開けるようになったのですが、あと一つまとめて開きたいものがありますよね。

そうです、Webページですね。

ということで、今回はPythonで既定のブラウザでWebページを開くプログラムの作り方をお伝えします。

前回のおさらい

前回作成したスクリプトはこちらです。

EXCEL = r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'
FOLDER = r'C:\Users\ntaka\Dropbox\desktop'
import subprocess
subprocess.Popen(['start', EXCEL], shell=True)
subprocess.Popen(['explorer', FOLDER])

ExcelでBook1.xlsmファイルを開きつつ、デスクトップフォルダも開くというものですね。

subprocessモジュールのPopen関数が大活躍です!

今回は、ブラウザで特定のWebページを開きたいというのがお題です。

Popen関数でWebページを開いてみる

前回お伝えしている内容ですが、Popen関数は以下のように使います。

subprocess.Popen([プログラムファイル, 開くファイル])

開くファイルに指定したファイルを、プログラムファイルで指定したアプリケーションで開くことができます。

で、今回はWebページを開くということですから、Popenでブラウザを起動すればいいだろ?

ということで、Popen関数に渡すプログラムファイルをChromのプログラムファイル、開くファイルに開くページのURLを渡して、実行してみました。

import subprocess
subprocess.Popen([r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe','https://tonari-it.com/'])

すると、無事にブラウザの新規タブでサイトが開きました。

PythonのPopenで開いたWebページ

ばっちりですね。

では、以上です。

…って終わりじゃなくて、別の方法があるのです。

既定のブラウザでWebページを開く

Pythonにはブラウザを操作するためのwebbrowserモジュールが標準で同梱されています。

これを使わない手はないのです。

webbrowserモジュールのインポート

webbrowserモジュールは標準ライブラリに含まれていますので、インストールは不要。

スクリプトの最初で、以下のようにインポートさえすればOKです。

import webbrowser

webbrowser.open関数でWebページを開く

それで、特定のWebページを開きたいときは、webbrowser.open関数を使います。

このように書きます。

webbrowser.open(url)

…簡単…!しかも、既定のブラウザで開いてくれます。

では、やってみましょう。

スクリプトはこちら。

import webbrowser
webbrowser.open('https://tonari-it.com/')

これを実行すると…

Pythonのwebbrowser.open関数で開いたWebページ

バッチリ開きました。簡単すぎます。

webbrowser.open関数はOS問わず、既定のブラウザで指定のURLを開いてくれます。

まあ、なんと優秀なことでしょう。さすがPython。

仕事でいつも使うプログラムをまとめて開くスクリプト

では、今回の内容もふまえて、仕事でいつも使うプログラムを全部まとめて開くスクリプトのサンプルを作ってみました。

EXCEL = r'C:\Users\ntaka\Dropbox\desktop\Book1.xlsm'
FOLDER = r'C:\Users\ntaka\Dropbox\desktop'
SPREAD_SHEET ='https://docs.google.com/spreadsheets/d/…/edit#gid=0'
SCRIPT = 'https://script.google.com/macros/d/…/edit?uiv=2&mid=…'
import subprocess,webbrowser
subprocess.Popen(['start', EXCEL], shell=True)
subprocess.Popen(['explorer', FOLDER])
webbrowser.open(SPREADSHEET)
webbrowser.open(SCRIPT)

webbrowser.open関数で開いているのはスプレッドシートと、そのスプレッドシートにバインドしているスクリプトです。

実行すると、以下のように両方ちゃんと開きます。

Pythonでスプレッドシートやスクリプトも開く

Googleドライブに保存しているファイルであればURLが決まっていますから、全てwebbrowser.open関数で開くことができますね。

便利です。

まとめ

以上、Pythonで既定のブラウザで特定のWebページを開く方法をお伝えしました。

これで、仕事で使ういつものアプリケーション、ファイル、フォルダ、Webページをダブルクリック一発で開けるようになりました。

執筆用とか、開発用とか、各仕事に合わせた「セット」を作っておいて、ランチャーに設定するなどをしておくとよいでしょう。

さて、次回はまたPythonで作れる別の便利ツールを紹介します。

どうぞお楽しみに!

連載目次:Pythonでいろんなプログラムをまとめて起動をする方法

お仕事でいつも使うアプリケーション、ファイル、フォルダ、Webページなどの「定番セット」を自動で起動するPythonスクリプトを作ります。とっても便利です。
  1. 初心者でも簡単!PythonでWindowsのアプリケーションを起動する方法
  2. Pythonで特定のファイルをアプリケーションで開く方法とフォルダを開く方法
  3. 【初心者向けPython】既定のブラウザでWebページを開くツールの作り方

簡単Git入門!はじめてのコミットでリポジトリ(フォルダ)の初期状態を保存しよう

$
0
0

簡単Git入門!最初のコミット・SourceTreeでフォルダの初期状態を保存する

ローカル&お一人様ではじめるSourceTreeによるGit入門。

連載2回めの前回では「SourceTreeでローカルファイルをリポジトリに指定する」までをご説明しました。

3回目の今回は、指定したリポジトリ(ローカルファイル)の状態をSourceTreeに保存(コミット)するまでを解説したいと思います。

解説にあたり使用しているサンプルフォルダは前回の記事冒頭でご紹介・ご提供しております。必要な方はダウンロードされて下さい。

それでは「SourceTreeでローカルファイルをリポジトリに指定」した状態の続きから見ていきましょう。

※SourceTreeを起動してください。

SourceTreeと「Gitテスト」フォルダの現在の状態

現状で、「Gitテスト」フォルダは、Gitの監視下に置かれています。
この状態はSourceTreeを閉じるまで続きます。

SourceTreeを終了しますと、監視状態も途切れるの?と気になりますが、SourceTreeは次に起動したときに、監視下にあるフォルダについて、自分が持っている最終情報と現在の状態を比較して、変更点を読み取ってくれます。

よって「作業をする際にSourceTreeを起動していないと、Gitの保存情報とフォルダの現状の情報が狂う!!」ということはないです。

しかしそのためにはまず、Git(SourceTree)に「Gitテスト」フォルダ内の状態を、情報として保存してもらわなければなりません。

このための操作を「コミット」といいます。

まずは初期状態をコミットしよう

前回の操作で「Gitフォルダ」をリポジトリに指定して、さっそくファイル変更などしてみたいところですが、まずは現状の状態を最初の履歴として保存(コミット)しておきましょう。

※前述しましたがコミットとは、変更履歴を保存すること、と覚えてください。

今の段階では、Gitには「Gitフォルダ」の状態が何も保存されていません。

フォルダをリポジトリに登録した段階で初期状態を保存してくれてそうな雰囲気ですが、そんなことはないんです。

要はPCのバックアップと同じです。バックアップ処理をしてやらないと、肝心のバックアップファイルが作られないのです。

コミットの手順

それではコミットの手順を見ていきましょう。

現在、「Gitテスト」フォルダの中には「memo.txt」が一つで、「memo.txt」の中身は白紙です。この状態をGitに保存します。

SourceTreeで「ファイルステータス」タブを表示

SourceTreeの画面は、以下の図の様になっているはずです。

SourceTree画面

もし画面がこのような状態になっていなかったら、一番下のタブが「ファイルステータス」になっているか確認してください。

「ログ」や「検索」になっていると、違う操作画面が表示されます。

「ファイルステータス」タブの画面構成

SourceTree画面


①はステージングエリアです。ここに移動したファイルが履歴保存(コミット)の対象となります。

②は作業ディレクトリです。リポジトリとして指定した「Gitテスト」フォルダの中身が表示されています。

③には、②のエリアで選択しているファイルの中身が表示されます。
※現状「memo.txt」は白紙なので、何も表示されていません。

さて、②の作業ディレクトリにおいて、「memo.txt」の左側に「?」マークがついていますね。

「これは履歴保存がされてないファイルですよ」と教えてくれるアイコンです。

目的のファイルをインデックスに追加

ファイルを指定

「memo.txt」を選択した状態で、上の「選択をインデックスに追加」をクリックしましょう。隣のボタン「全てインデックスに追加」でもOKです。
※ファイルをドラックドロップでも移動できます。

ステージングエリアへファイルを追加完了

ステージングエリアへ、「memo.txt」が移動しました。このエリアに追加されたファイルがコミット(履歴保存)の対象となります。

今回は1ファイルだけなので、何でわざわざこんな手間を?と思えますが、実際の利用シーンではコミット(履歴保存)したいファイルとそうではないファイルがそれぞれ存在することになります。

毎回フォルダ内の全てを保存していたらデータ量が膨大になってしまいますので、選択というステップがあるのは、ありがたい仕様ですね。

次はいよいよ、履歴保存(コミット)を行います。

最初のコミット操作

コミットの操作は、画面の下部エリアで行います。

コメントを記入

画像のボカしている範囲には、私の名前とメールアドレスが表示されています。(皆さんの画面では、皆さんの名前とメアドですね)

その下の空欄に、コミット用のコメントを書き込みます。

コメントの記述にルールなどはありませんので、自分がわかる説明文を入れましょう。

このコメント記入は必須です。空欄ではコミットできません。

履歴を見返した時、どのような状態の保存履歴なのかを確認するために必要な情報ですので、あとから読んでもわかる説明文を入れることが大切です。

コメントを書き込んだら、右下のコミットボタンをクリック。

一見なにも変わってませんが、これで初期状態がGitに保存されました。

コミット完了画面とログの確認画面

コミットが完了すると画面はこのように切り替わります。

コミット完了画面

ファイルなどが消えてしまって、コミットされたかどうか不安になりますね。

ここで一旦、ログ画面を見てみましょう。

ログの確認-ログのタブ

一番下のタブを「ログ」に切り替えてください。

ログの確認-ログ画面

上の欄を見ると、先程のコメント内容がGitに保存されているのがわかります。

また下の欄では、この保存を行ったのが誰で何時に実行されたかのログも確認できます。
ボカシを入れてますが、コミットした者のメアドとネーム、コミット時間などの記録を確認することができます。

これで今後様々な変更をおこなっても、いつでもまっさらな初期状態に戻すことができるようになりました。

まとめ

今回は、フォルダの初期状態をGitに保存するために、「はじめてのコミット」を行いました。

拍子抜けするほど簡単だったのではないでしょうか。

本来なら例の黒い画面(コマンドプロンプト)になにやら打ち込んで操作するものだったことを考えると、SourceTreeのようなソフトがあるのはありがたいですね。

次回は「memo.txt」の中身を編集し、SourceTreeでその変更がどのように管理されるかについて見ていきたいと思います。

連載目次:ローカル&お一人様向けSourceTreeによるGit入門

ローカルかつお一人様でもとっても便利なバージョン管理ツール。本シリーズでは操作画面やインストール方法が新しくなったSourceTreeを使って、簡単にGitバージョン管理をする方法をお伝えしていきます。
  1. 簡単Git入門!SourceTreeではじめるローカルバージョン管理
  2. 簡単Git入門!SourceTreeでローカルファイルをリポジトリに指定する
  3. 簡単Git入門!はじめてのコミットでリポジトリ(フォルダ)の初期状態を保存しよう

初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者かつWindowsユーザー向けに、Pythonでいろんな便利ツールを作る方法をお伝えしています。

メールで複数のファイルを送信したいとき、どのようにしていますか?

2,3個であればそのまま添付しちゃってもOKですが、それ以上のファイル数になると、添付も面倒ですし、受け取った相手も面倒ですよね。

そんな時に、使うのがZIPファイルです。

定期的にZIPファイルを作る必要があれば、Pythonに任せてしまうとラクチンです。

ダブルクリックでも動作させることができますし、バックアップ的にZIPファイル化するときはタスクスケジューラに登録すれば全自動で動作してくれます。

ということで、今回はPythonでファイルをZIP形式に圧縮するプログラムの作り方をお伝えします。

では、行ってみましょう!

zipfileモジュールをインポートする

PythonでZIPファイルを操作するには、標準ライブラリに含まれるzipfileモジュールを使います。

使う場合は、スクリプトの冒頭でインポートをすればOKです。

import zipfile

ZipFileオブジェクトを生成する

その上で、まずはzipfile.ZipFile関数を使いまして、ZipFileオブジェクトというZIPファイルの読み書きをするために使うオブジェクトを生成します。

「ジップファイル」だらけですが、混乱しないようにしてくださいねw

書き方はコチラです。

zipfile.ZipFile(file, mode)

fileはフルパスで指定してもよいですし、ファイル名だけならスクリプトファイルと同階層のフォルダ配下のファイルになります。

これで、指定したファイル名でZIPファイルが、指定したモードで開かれます。

modeはどのようなモードでfileを開くかという指定になりまして、以下のような文字を指定します。

  • 読み取り専用:r(デフォルト)
  • 書き込み:w
  • 追加書き込み:a

ZIPファイルを展開するのであれば「r」、上書きするのであれば「w」ですね。「a」を設定すれば、ZIPファイルにファイルを追加していくということもできるモードにないrます。

例として、書き込みモードで「test.zip」というzipファイルを作るであれば

myzip = zipfile.ZipFile('test.zip','w')

とします。

「test.zip」が存在していなければ、新規で作成されますよ。

ZIPファイルをwith文を使って開く

ZipFileオブジェクトとして開いたZIPファイルは、closeメソッドで閉じる必要があります。

例えば、以下のようなスクリプトですね。

import zipfile
myzip = zipfile.ZipFile('test.zip','a')
#処理
myzip.close()

ただ、closeメソッド…忘れちゃいます。それで、ZipFileオブジェクトも、open関数で開いたファイルオブジェクトと同様にwith文で括ることで、closeメソッドを省略することができますよ。

このような書き方です。

with zipfile.ZipFile(file, mode) as 変数:
#処理

ですから、前述のスクリプトは以下のように書き換えることができます。

import zipfile
with zipfile.ZipFile('test.zip','a') as myzip:
     #処理

スッキリですね!

writeメソッドでZIPファイルにファイルを追加する

こうして開いたZIPファイルにファイルを追加するには、writeメソッドを使います。

ZipFileオブジェクト.write(file)

fileにフルパスまたは、スクリプトファイルと同階層のファイルを指定すればOKです。

例えば、スクリプトファイルと同階層の「test.csv」をZIPファイルとして圧縮するのであれば、以下のようにします。

import zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
     myzip.write('test.csv')

実行しますと、以下のように同階層のフォルダに「test.zip」ができました。

Pythonで作成したZIPファイル

ZIPファイルの中身ものぞいてみましょう。

Pythonで作成したZIPファイルの中身

ちゃんと「test.csv」が含まれていますね。

まとめ

PythonでファイルをZIPファイルに圧縮する方法の基本についてお伝えしました。

  • zipfileモジュールをインポート
  • ZipFileオブジェクトを生成
  • writeメソッドで書き込み

なんか、他のモジュールと似ていますよね。助かります。

さて、次回は複数ファイルを圧縮する準備として、フォルダツリーを渡り歩いてサブフォルダとファイルをリストアップする方法をお伝えします。

Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法
初心者向け&Windowsユーザー向けPythonでZIP圧縮をするツールの作り方をお伝えしています。今回はPythonでフォルダ内のツリー構造を走査してサブフォルダとファイルを全てリストアップする方法です。

どうぞお楽しみに!

連載目次:初心者向け!PythonでファイルをZIP圧縮するツールを作る

複数ファイルをまとめてZIPに圧縮すると、メール添付やバックアップなどに便利です。定期的にZIP圧縮をする必要があるのであれば、Pythonに任せてしまいましょう!ツールの作り方をシリーズでお伝えしていきます。
  1. 初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
  2. Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法

Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法

$
0
0
walk

photo credit: Tom Lord Nukka 21 August 2015 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向け&Windowsユーザー向けPythonでZIP圧縮をするツールの作り方をお伝えしています。

前回の記事はコチラ。

初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
プログラミング初心者かつWindowsユーザー向けに、Pythonでいろんな便利ツールを作る方法をお伝えしています。今回はPythonでファイルをZIP形式に圧縮するプログラムの作り方をお伝えします。

ファイルをZIP形式に圧縮する方法をお伝えしました。

ただ、ZIPファイルに圧縮するのは単一ファイルではなくて、複数のファイルが望ましいですよね。

そして、あわよくば特定のフォルダ配下をその構造のままごっそり圧縮したいわけです。

そのためには、フォルダの中のサブフォルダとファイルのツリー構造を全て洗い出す必要があり、工夫してプログラムをしなくてはならない気がするのですが、そこはさすがのPython。

たった一つのos.walk関数でそれを解決しちゃいます。

ということで、今回はPythonでフォルダ内のツリー構造を走査してサブフォルダとファイルを全てリストアップする方法をお伝えします。

前回のおさらいと今回のお題

前回紹介したスクリプトはこちらでした。

import zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
     myzip.write('test.csv')

zipfileモジュールのZipFile関数とwriteメソッドを使って、ファイルをZIP圧縮するスクリプトです。

フォルダを丸ごとZIP圧縮したい

例えば、以下のようなフォルダ構造のフォルダが、スクリプトファイルと同階層にあるとします。

test
┗test1
 ┗test1.csv
┗test2
 ┗test2-1.csv
 ┗test2-2.csv

そこで、ほのかな期待を込めて、前述のスクリプトの3行目、write関数の引数を、この同階層のフォルダ名にしたらいけるのではないかと、作ってみました。

import zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
    myzip.write('test')

実行してみますと…

PythonでフォルダをZIP圧縮した中身

残念ながらtestフォルダの中身は空っぽ…

つまり、指定したフォルダのみしかZIPファイルに追加されないんですね。

これは別の方法を考える必要があります。

os.walk関数でフォルダのツリー構造を走査する

そこで登場するのが、指定したフォルダ配下のツリー構造を走査するos.walk関数です。

書き方はこちらです。

os.walk(root)

rootには走査するフォルダを指定します。

すると、os.walk関数はroot配下のツリーに含まれるすべてのフォルダについてタプルを生成します。ちなみに、タプルというのは、変更ができないリストのことで、以下のような内容です。

(folder, subfolders, files)

これら3つが何者かというと

  • folder:フォルダ
  • subfolders:そのフォルダに含まれるサブフォルダのリスト
  • files:そのフォルダに含まれるファイルのリスト

です。

つまり、生成された各タプルについて、その中身を見ていけば、全てのサブフォルダとファイルを一覧することができるということです。

os.walk関数で生成されたタプルについて繰り返し処理をする

で、その方法なのですが、おなじみfor文を使います。os.walk関数で取得した全てのタプルについて繰り返し処理をするには、以下のように書きます。

for folder, subfolders, files in os.walk(root):
 #処理

こうすることで、毎回の繰り返しの中で、タプルの要素であるfolder、subfolders、filesを取り出すことができます。

Pythonのfor文の万能さが光りますね…

フォルダ構造を出力するスクリプト

では、先ほどのフォルダ「test」に対して、以下のようなスクリプトを作成してみました。

import os
for folder, subfolders, files in os.walk('test'):
    print('folder: {}'.format(folder))
    print('subfolders: {}'.format(subfolders))
    print('files: {}'.format(files))
    print()

os.walk関数で取得した各タプルの内容を出力する内容ですが、なかなかシンプルに書けました。

実行してみましょう。

Pythonのos.walk関数でフォルダのツリー構造を出力する

バッチリですね。

そして、サブフォルダとファイルはリストで取得できていますから、さらにfor文を使えば全てのサブフォルダとファイルが取り出せそうです。

まとめ

以上、Pythonでフォルダ内のサブフォルダとファイルを全てリストアップする方法についてお伝えしました。

本来であれば、再帰的な処理を組む必要があるようなところなのですが、os.walk関数のおかげでとってもラクチンです。

他のツールを作るときにも活躍してくれそうです。

では、次回ですが全てのサブフォルダとファイルをZIPファイルに追加していきたいと思います。

どうぞお楽しみに!

連載目次:初心者向け!PythonでファイルをZIP圧縮するツールを作る

複数ファイルをまとめてZIPに圧縮すると、メール添付やバックアップなどに便利です。定期的にZIP圧縮をする必要があるのであれば、Pythonに任せてしまいましょう!ツールの作り方をシリーズでお伝えしていきます。
  1. 初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
  2. Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法

Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法

$
0
0
postal-bike

photo credit: kohlmann.sascha Postboten via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向けにPythonでZIP圧縮するツールの作り方をお伝えしています。

前回の記事はこちら。

Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法
初心者向け&Windowsユーザー向けPythonでZIP圧縮をするツールの作り方をお伝えしています。今回はPythonでフォルダ内のツリー構造を走査してサブフォルダとファイルを全てリストアップする方法です。

Pythonでフォルダ配下のツリーを渡り歩くos.walk関数の使い方についてお伝えしました。

さて、今回ですが、そのos.walk関数を使うことで、フォルダ配下のツリー上にあるすべてのサブフォルダとファイルについてZIPファイルに追加して圧縮することができます。

ということで、Pythonで指定のフォルダ配下をまとめてZIP圧縮するツールの作り方です。

では、行ってみましょう!

複数のフォルダとファイルをZIP圧縮する

単体のZIP圧縮についておさらい

まず、ZIP圧縮についておさらいですが、前々回作ったスクリプトが参考になります。

こちらです。

import zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
     myzip.write('test.csv')

ZipFile関数を使って、test.zipというZIPファイルを作成して、そこにwriteメソッドを使ってtest.csvという単体のファイルを追加するという内容です。

前々回の記事もご参考下さい。

初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
プログラミング初心者かつWindowsユーザー向けに、Pythonでいろんな便利ツールを作る方法をお伝えしています。今回はPythonでファイルをZIP形式に圧縮するプログラムの作り方をお伝えします。

複数のフォルダとファイルを直接追加するスクリプト

単体ではなくて複数、そしてファイルだけでなく、フォルダも追加したい場合は以下のようなスクリプトを作ればOKです。

import os, zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
    myzip.write('test')
    myzip.write('test\\test1')
    myzip.write('test\\test1\\test1.csv')
    myzip.write('test\\test2')
    myzip.write('test\\test2\\test2-1.csv')
    myzip.write('test\\test2\\test2-2.csv')
    myzip.write('test\\test.csv')

実行するとZIPファイルが生成され、中身をのぞくと以下のようになります。

PythonでZIP圧縮したフォルダの中身

writeメソッドでフォルダやファイルを追加していき、ZIPファイルがクローズした(with文のブロックを抜けた)時点で、追加されたフォルダ・ファイルを含んだ形でZIPファイルが生成されます。

ですが、全部のサブフォルダとファイルを直接指定するわけにはいきませんよね。

フォルダ配下の全てのフォルダ・ファイルをZIPファイルに追加

os.walk関数のおさらい

ということで、前回ご紹介したos.walk関数が活躍します。

前回のスクリプトを復習してみましょう。

import os
for folder, subfolders, files in os.walk('test'):
    print('folder: {}'.format(folder))
    print('subfolders: {}'.format(subfolders))
    print('files: {}'.format(files))
    print()

os.walk関数は指定したフォルダをルートとして、配下のツリーに含まれるすべてのフォルダについて、以下のタプルを生成します。

(folder, subfolders, files)

folderはフォルダ、subfoldersはそのフォルダに含まれるサブフォルダのリスト、filesはそのフォルダに含まれるファイルのリストです。

os.walk関数を使ったフォルダの圧縮

つまり、os.walk関数で生成したタプルについて

  • folder
  • filesに含まれるファイル

をZIPファイルに追加すれば、ルートフォルダ配下の全てのフォルダとファイルについてZIPファイルに追加できるということです。

それを踏まえて、以下スクリプトを作成してみました。

import os, zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
    for folder, subfolders, files in os.walk('test'):
        myzip.write(folder)
        for file in files:
            myzip.write(file)

しかし、このスクリプトではいあkのようなエラーが出てしまいます。

Pythonで出たFileNotFoundError

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: ‘test.csv’

なぜエラーが出てしまうかというと、リストfilesの要素はファイル名しか持たずに、フォルダパスの情報を持っていないんですね。

該当のファイルは作業フォルダの中には存在しませんので、「ファイルが見つかりません。」となってしまうわけです。

つまり、「test\test2」と、作業フォルダからのパスも含めて指定をしてあげる必要があります。

os.path.join関数を使ってパスを結合する

作業フォルダからのパスは、folderがその情報を持っていますので、folderとfileを連結すればこの問題は解決します。

ですから、前述のスクリプトの6行目を

myzip.write(folder + "\\" + file)

とすればOK!…というわけではあるのですが、せっかくなのでパスの結合にはos.path.join関数を使いましょうか。

なぜなら、os.path.join関数ならWindowsでもMacでも環境の違いを気にせずに、賢くパスを結合してくれるのです。

os.path.join(パス1, パス2,…)

これで、指定したパスを全て環境に合わせたファイルセパレータを用いて連結してパスを生成します。

ということで、完成したスクリプトはこちらです。

import os, zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
    for folder, subfolders, files in os.walk('test'):
        myzip.write(folder)
        for file in files:
            myzip.write(os.path.join(folder,file))

まとめ

以上、Pythonで指定のフォルダ配下をフォルダ、ファイル含めて全てZIP圧縮する方法をお伝えしました。

逐一または定期的にZIP圧縮するフォルダがあれば、仕込んでおかない手はないですよね。

さて、次回ですが、ZIPファイル名に「年月日」を付与する方法をお伝えします。

Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する
プログラミング初心者&Windowsユーザー向けにPythonでフォルダ圧縮ツールを作る方法をお伝えしています。今回はPythonで現在の日時を取得して文字列に変換する方法についてお伝えします。

どうぞお楽しみに!

連載目次:初心者向け!PythonでファイルをZIP圧縮するツールを作る

複数ファイルをまとめてZIPに圧縮すると、メール添付やバックアップなどに便利です。定期的にZIP圧縮をする必要があるのであれば、Pythonに任せてしまいましょう!ツールの作り方をシリーズでお伝えしていきます。
  1. 初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
  2. Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法
  3. Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法
  4. Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する

Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する

$
0
0
now

photo credit: Exile on Ontario St Now on via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向けにPythonでフォルダ圧縮ツールを作る方法をお伝えしています。

前回の記事はコチラでした。

Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法
プログラミング初心者&Windowsユーザー向けにPythonでZIP圧縮するツールの作り方をお伝えしています。今回は、Pythonで指定のフォルダ配下をまとめてZIP圧縮するツールの作り方です。

フォルダ配下を全てZIP圧縮する方法をお伝えしました。

さて、前回作ったツールなのですが、動作させるたびに上書きでZIPファイルを生成する仕組みになっています。

ただ、過去のZIPファイルを残しておきたい場合ありますよね?

そんな時のテクニックとして、例えば「test_20170910.zip」というふうに、ZIPファイル名に本日の日付を入れておけば、過去分を日単位で残しておけるということになります。

ということで、今回はPythonで現在の日時を取得して文字列に変換する方法についてお伝えします。

では、行ってみましょう!

日付を取り扱うdatetimeモジュール

Pythonで日時を取り扱う場合は、datetimeモジュールを使います。

標準ライブラリに含まれていますので、スクリプトの冒頭でインポートすれば使用することができます。

import datetime

datetimeモジュールでは、日時についていくつかの種類のデータ型を利用することができますが、代表的なものとして以下のようなものがあります。

クラス 説明
date 日付
time 時刻
datetime 日時と時刻
timedelta 経過時間

今回は、年月日つまり日付が利用できれば良いので、dateクラスまたはdatetimeクラスを利用することになります。

以降、大は小を兼ねる的にdatetimeクラスを使いますが、その場合のメソッドの記述方法としては、モジュール名のdatetime、クラス名のdatetime、そしてメソッドをピリオドでつないで以下のようになります。

datetime.datetime.関数やメソッド

now関数で現在の日時を取得する

現在の日時を取得するには、datetime.datetime.now関数を使います。

書式はまんまで、以下の通りです。

datetime.datetime.now()

これを実行すると、現在の日時をdatetimeオブジェクトという形式で生成することができます。

試しに以下のようなスクリプトを実行してみましょう。

import datetime
now = datetime.datetime.now()
print(now) #2017-09-10 22:08:41.814136

Shellウィンドウに現在の時刻がマイクロ秒の単位まで出力されたことと思います。

datetimeオブジェクトは文字列連結できません

ですが、これを元に「test_20170910.zip」というようなファイル名を生成すべく、以下のようなスクリプトを実行すると

import datetime
now = datetime.datetime.now()
print('test_' + now)

以下エラーが発生してしまいます。

PythonのTypeError

TypeError: must be str, not datetime.datetime

strつまり文字列じゃないとダメよ、ということですね。

日時を文字列に変換する

str関数でdatetimeオブジェクトを文字列に変換

str関数を使えば、datetimeオブジェクトを文字列に変換することができます。

例えば、以下のスクリプトですね。

import datetime
now = datetime.datetime.now()
print('test_' + str(now)) #test_2017-09-10 22:13:47.289211

まあ、いいっちゃいいんえすけど、時、分、秒ましてやマイクロ秒までは不要ですね。

formatメソッドでdatetimeオブジェクトを文字列に変換

そこで、以前もお伝えしたformatメソッドを使う方法があります。

Pythonで文字列の中に変数などの値を埋め込むformatメソッドの使い方
Pythonでクリップボードを使った便利ツールを作る非エンジニア&Windowsユーザー向けのシリーズです。今回はPythonで文字列の中に変数の値を埋め込むというformatメソッドの使い方をお伝えします。

formatメソッドは対象となる文字列の指定の位置に引数の値を差し込むというものですが、引数をdatetimeオブジェクトとした場合に年、月、日などをいい感じに文字列の中に埋め込むこともできます。

例を見たほうが速いので、こちらのスクリプトをご覧ください。

import datetime
now = datetime.datetime.now()
print('test_{0:%Y%m%d}'.format(now)) #test_20170910

ファイル名として欲しい文字列が出てきました。

formatメソッドの対象とする文字列に、以下のコードを仕込むことで、その位置に指定の値を差し込むことができるようになります。

コード 説明
%d 2桁の日
%m 2桁の月
%y 2桁の年
%Y 4桁の年
%H 24時間表記の時
%I 12時間表記の時
%p AMまたはPM
%M 2桁の分
%S 2桁の秒
%f 6桁のマイクロ秒

ZIPファイル名に年月日を使用する

以上を踏まえて、フォルダのZIP圧縮ツールのファイル名に年月日を加えてみました。

こちらのスクリプトです。

import os, zipfile, datetime
now = datetime.datetime.now()
zipname = 'test_{0:%Y%m%d}.zip'.format(now)
with zipfile.ZipFile(zipname,'w') as myzip:
    for folder, subfolders, files in os.walk('test'):
        myzip.write(folder)
        for file in files:
            myzip.write(folder + "\\" + file)

実行をすると、以下のように本日の日付でZIPファイルが作成されます。

Pythonで年月日を含むファイル名にZIP圧縮

まとめ

以上、Pythonで現在の日時を取得して、指定のフォーマットの文字列に変換する方法をお伝えしました。

datetimeモジュールと、datetimeオブジェクト、now関数の使い方、formatメソッドによる文字列の変換など使いどころいっぱいのテクニックかなと思います。

さて、次回ですが、このZIP圧縮ツールをもうちょっと便利にしていきます。

どうぞお楽しみに!

連載目次:初心者向け!PythonでファイルをZIP圧縮するツールを作る

複数ファイルをまとめてZIPに圧縮すると、メール添付やバックアップなどに便利です。定期的にZIP圧縮をする必要があるのであれば、Pythonに任せてしまいましょう!ツールの作り方をシリーズでお伝えしていきます。
  1. 初心者でも簡単!PythonでファイルをZIP形式に圧縮する基本のプログラム
  2. Pythonでフォルダ内のサブフォルダ&ファイルを全てリストアップする方法
  3. Pythonで指定フォルダ配下のサブフォルダとファイルを全てZIP圧縮する方法
  4. Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する

Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

非エンジニア&Windowsユーザー向けにPythonでお仕事に便利なツールの作り方をお伝えしています。

前回の記事はコチラでした。

Pythonで現在の日時を取得して指定のフォーマットの文字列に変換する
プログラミング初心者&Windowsユーザー向けにPythonでフォルダ圧縮ツールを作る方法をお伝えしています。今回はPythonで現在の日時を取得して文字列に変換する方法についてお伝えします。

指定のフォルダをZIP圧縮するツールを作ったんですね。

日付が違うと新しいZIPファイルが生成されますので、フォルダの中にどんどんZIPファイルが増えていってしまうんですね。

ですから、ある一定の数以上になったら、古い順にファイルを自動で削除てくれないかな~などと思ってしまうわけです。

と、いうことで、そんなプログラムを作ってみたいと思います。

まず、今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。

では、行ってみましょう!

フォルダ内の古いZIPファイルを削除したい

まず、お題となるフォルダは以下のような状態とします。

Pythonで古いファイルを削除するフォルダ

日付ごとにzipファイルがどんどん増えていくんで、ZIPファイルの数が3を超えたら自動で削除をしていきたいとします。

ファイルの作成日時を取得する

まず、「古い」というのをどのように判断をするか…という課題がありますよね。

パっと見ですと、ファイル名の日付部分を分解してそれで比較するという方法もありそうですが、そこはPython。実はファイルの作成日時を取得する命令が用意されています。

os.path.getctime関数です。

os.path.getctime(path)

pathはフルパスでも良いですし、作業フォルダであればファイル名だけでもOKです。

ですから、例えば以下のようなスクリプトを作れば、「test_20170910.zip」の作成日時を知ることができます。

import os
print(os.path.getctime('test_20170910.zip'))

osモジュールが必要ですので、インポートをします。あとは、前述の書式通りに作成日時を知りたいファイルを指定すればOKですね。

実行をしますと…

Pythonでファイルの作成日時を取得

1505220473.867423

なんじゃこりゃ…ってやつが出力されましたね。

エポックとは、エポック秒とは

os.path.getctime関数で取得できる日時はエポック秒と呼ばれるものです。

まず、エポックというのがありまして、Python公式ドキュメントから引用しますと、以下のようなものです。

エポック (epoch) は時刻の起点のことで、これはプラットフォーム依存です。 Unix では、エポックは (UTC で) 1970 年 1 月 1 日 0 時 0 分 0 秒です。 与えられたプラットフォームでエポックが何なのかを知るには、 time.gmtime(0) の値を見てください。

引用16.3. time — 時刻データへのアクセスと変換 — Python 3.6.1 ドキュメント

UNIX時間とも呼ばれますね。

そして、エポック秒は、エポックからの経過した秒数のことです。

1970年から15億秒過ぎているわけですね…私、1976年生まれなので、それに近い秒数を過ごしていると考えると感慨深いものです。

エポック秒で古いファイルを判定するには

この15億秒なにがし…我々人間には結局いつなん?という感じですが、実際にファイルが新しいか、古いかを比較するためには、そんなことを知る必要はありません。

このエポック秒をわざわざ年月日形式(例えばdatetimeオブジェクトのような)に変換する必要はないんです。

というのも、エポック秒が小さければ「古い」というわけですから、そのまま比較すればOKなわけです。

ファイルの更新日時とアクセス日時を取得する

ところで、ちょっと寄り道をします。

Pythonでは、ファイルの作成日時だけでなく、アクセス日時や更新日時を取得することができます。

アクセス日時を取得するには、os.path.getatime関数

os.path.getatime(path)

更新日時を取得するには、os.path.getmtime関数

os.path.getmtime(path)

取得できます。

いずれもエポック秒での取得になります。

getctime関数と合わせて覚えておくとよいですね。

まとめ

今回は、Pythonでファイルの作成日時、更新日時、アクセス日時を取得する方法をお伝えしました。

また、エポックやエポック秒についてもお伝えしました。

ファイルの作成日時もそのまんまシュパっと取得できちゃうんですね。Python、ありがたいです。

次回は、フォルダの中のファイル一覧を取得する方法をお伝えします。

どうぞお楽しみに!

連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム

フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。
  1. Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法

Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法

$
0
0
list

photo credit: Allison Mickel Best for Last via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向けPythonでフォルダ内の古いファイルを自動で削除するツールの作り方をお伝えしています。

前回の記事はコチラ。

Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
非エンジニア&Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。

ファイルが「古い」かどうかを判定するために、ファイルの作成日時を取得する方法をお伝えしました。

とは言いつつも、フォルダの中にはZIP以外のファイルもありますよね…。

ということで、今回はPythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法についてお伝えします。

前回のおさらいと目標の確認

前回作ったコードをはコチラ。

import os
print(os.path.getctime('test_20170910.zip'))

おさらいも何も、指定したZIPファイルの作成日時をエポック秒で取得するだけのスクリプトでしたね…

ちなみに、今回対象としているフォルダはこちらです。

Pythonで古いファイルを削除するフォルダ

目標としては、フォルダ内のZIPファイルの数が3つを超えたら、古い順に削除をしていきたいと思っています。

プログラムの流れとしては、以下のようなものを目指していきたいわけです。

  1. フォルダ内のファイルを全てについてループする
  2. その中でZIPファイルがあれば作成日時とファイル名をリスト化する
  3. リストの数が3を超えていたら、作成日時が古いファイルを削除する

os.listdir関数でフォルダ内の全てのファイルについてループをする

では、まずフォルダ内のファイルについてループする方法を考えましょう。

そこで、フォルダ内のフォルダやファイルについてのリストを返す便利なos.listdir関数というものがあります。

os.listdir(path)

pathはフルパスや相対パスでも指定できますが、省略した場合は、作業フォルダが対象となります。

リストで取得できますから、for文を使ってループを回すことができます。

前述のフォルダについて、以下スクリプトを実行してみましょうか。

import os
for file in os.listdir():
    print(file)

実行をしますと、以下のようにフォルダ内のファイル(とフォルダ)が出力されます。

Pythonでフォルダ内のファイル・フォルダ一覧を出力

ただ、あれですね。ZIPファイルだけじゃなくて、pyファイルも含まれちゃってますね。

目標としては、ZIPファイルだけを削除対象としたいので、それだけを取り出す工夫が必要です。

特定の拡張子のファイルだけ取得する

パッと思いつくのは、ファイルの拡張子を獲得して、ZIPファイルかどうかをif文で判定するような処理ですよね。

os.path.splitext関数でパスをベースと拡張子に分割する

そんなときに使える、os.path.splitext関数というものがあります。

os.path.splitext(path)

os.path.splitext関数は、pathをbase(拡張子以外の部分)とext(ピリオドを含む拡張子)に分割して、タプルで返します。

以下スクリプトを実行してみましょうか。

import os
for file in os.listdir():
    print(os.path.splitext(file))

Pythonでファイル名をベースと拡張子に分割してタプル化

バッチリ拡張子がわかりますね。

タプルを複数の変数に代入する

タプルは、以下書式で各要素を変数に格納できます。

変数1, 変数2,… = (要素1, 要素2,…)

ですから、例えば以下のようにすれば、ベースネームと拡張子をそれぞれ取得できるというわけです。

base, ext = os.path.splitext(file)

では、こちらも確認してみましょうか。

以下スクリプトを実行してみてください。

import os
for file in os.listdir():
    base, ext = os.path.splitext(file)
    print('file:{},ext:{}'.format(file,ext))

以下のように、ちゃんと拡張子が取得できていますね。

Pythonでフォルダ内のファイルの拡張子を取得

拡張子により条件分岐する

あとは、if文を使って条件判断してあげればOKですね。

例えば、拡張子が「.zip」のものだけ出力するのであれば、以下のようなスクリプトにすればよいです。

import os
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        print('file:{},ext:{}'.format(file,ext))

この実行結果がコチラ。

Pythonでフォルダ内のZIPファイルのみ抽出

ちゃんとZIPファイルだけ出力されましたね。

まとめ

Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法をお伝えしました。

  • os.listdir関数でフォルダ内の全てのファイル・フォルダをリスト化する
  • os.path.splitext関数でファイル名のベースと拡張子を分割してタプル化する
  • タプルを複数の変数に格納する

といったテクニックを学びました。

さて、次回ですが、抽出したファイルのファイル名と作成日時をリスト化する方法についてお伝えします。

どうぞお楽しみに!

連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム

フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。

  1. Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
  2. Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法

【9/16・9/17】WordCamp Tokyo 2017に登壇します!

$
0
0

FB-cover_speaker

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

直前の告知で恐縮ですが、9/16にWordCamp Tokyo 2017にて登壇をしますのでお知らせです!

WordCampにはブログをはじめてから毎回、おととし、昨年と参加させていただいていまして、たくさんの学びがありました。

参考WordCampはWordPressの利他の精神を再確認しつつ気持ちを引き締める良い機会

参考WordPressを選択すべき真の理由はオープンソースそしてGPLにあり

参考マルチパブリッシングが必要になる理由とWordPressが果たす役割

まさか、3回目の参加で登壇ができることになろうとは…

そして、なんと同じセッションで登壇されるのは、前々回のWordCampでのセッションで多大なる衝撃と学びを下さったモンキーレンチのキタジマタカシ(@inc2734)さん…!

参考WordPressサイトを10分で立ち上げる方法を目の当たりにした

ということで、WordCamp Tokyo 2017について、当日のセッションについて、お知らせいたします。

WordCampとは

まずWordCampについて「WordCamp Tokyo 2017」サイトから引用させて頂きます。

世界シェア No.1 であるオープンソース CMS「WordPress」の普及促進と情報交換を目的としてユーザーや開発者が集うカンファレンスです。2006年にサンフランシスコで始まり、現在では年間48カ国・201都市で開催されています。

テーマ「Join 〜 つながる人・つながる世界・つながる未来 〜」2017年9月16日(土)-17(日) 開催 ベルサール新宿グランド 5F コンファレンスセンター

今回開催されるWordCamp Tokyo 2017 のテーマは「Join 〜 つながる人・つながる世界・つながる未来 〜」。

2日間合わせて1,000人以上が参加する、とっても大きなWordPressのイベントです。

一日目の9/16はセッションデイで、エンジニア向け、デザイナー向け、ディレクター向け、様々な切り口でWordPressの情報が提供されます。

以下記事でタイプ別のオススメセッションが紹介されているので、参考にするとよいですね。

ごめんください。更新班のコスギです。 WordCamp Tokyo 2017 は今週末!16日!土曜日です! …

12:30 Room E-F ランチセッションで登壇します

今回、12:30からRoom E-Fで開催されるランチセッションで登壇します。

ランチセッションは3部構成になっていまして、最初はWordPressのテーマやプラグインの開発者の北島さんによるお話、「地方Web制作者とWordPress ー僕がどのようにしてWordPressに関わるようになり、独立するに至ったかー」です。

対象者 初級/開発者、デザイナー、ブロガー セッション内容 専門学校を卒業後、地元のWeb制作会社でWebデザ…

リハーサルでご一緒しましたが、仕事が多くない地方で、いかにして独立していかにして仕事や活動を広げるかという、リアルなノウハウが詰まったお話です。

続いて私の「ブログを強力な武器としてビジネスにインストールすることで独立を成功させた話」
です。

対象者 初級/開発者、ブロガー セッション内容 ブログ活用というと、広告やライティングでの収益がフォーカスされ…

独立してからこの二年半、ブログが仕事と収益にどのような価値をもたらしたのか、またそのポイントみたいな話をさせていただきます。

そして、最後にミニトークが用意されているという流れです。

モデレーターは、東京と大分の二拠点で活躍されている、よつばデザインの後藤さん。3人で独立・起業についてお話をします。

独立・起業がテーマということで、ランチとはいえ、かなり濃ゆい感じになると思います。

セッションチケット…わずかにまだあります!

セッションチケット…執筆時点で本当にわずかですが、まだあります!

イベントへのご参加にはチケットが必要です。決済方法などについて、詳しくは「参加登録について」のページをご覧くだ…

(告知遅くてすみません…!)

独立、起業にはブログそしてWordPressが本当に強力な武器になります。ぜひ、WordCampにお越しいただいて学びを得ていただければと思います。

皆さんとお会いできることを楽しみにしています。

Pythonでチャットワークにメッセージを送る方法

$
0
0


こんにちは。
タダケン(@tadaken3)です。

Pythonでチャットワークにメッセージを送る方法をご紹介します。

本ブログでは、Google Apps Scirptでチャットワークにメッセージを送る方法を何度かご紹介していますが、Pythonでチャットワークにメッセージを送る方法も仕組みとしては同じです。

チャットワークが提供しているWEB APIに所定の方法でアクセスすることで、Pythonからチャットワークにメッセージが送れます。

Requestsモジュールをインストールする

APIにアクセスするにはRequestsモジュールを使用します。
Requestsモジュールはpipでインストールできます。

初心者向けPythonでパッケージ管理をしてくれるツールpipのはじめての使い方
非エンジニアでWindowsユーザー向けにPythonを学んでいく方法をお伝えしています。今回はPythonのパッケージ管理をするツールpipの初心者向けの最初の使い方についてお伝えします。
pip install パッケージ名

コマンドプロンプトを立ち上げて、以下のコマンドを実行するとインストールが開始されます。

pip install requests

API KeyとRoom IDをセットする

チャットワークにメッセージを送るには、メッセージ本文とは他に以下の2つの情報が必要です。

通知を送るルームを指定するためのルームID
チャットワークの認証するAPIのアクセストークン

チャットワークのAPIを取得する方法はこちらの記事です。

【祝】Zapier連携!Twitterのツイートをチャットワークに通知するぞ
チャットワークがZapier経由でGmailやTwitterなどの各種サービスと組み合わせて連携するができるようになりました!まずTwitterのツイートをチャットワークに送る連携をやってみました。

ルームIDの取得方法はこちらにまとまっています。わからない方はぜひご覧になってみてください。

Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
Google Apps Scriptの第一歩ですが、しょっぱなから真っ先にチャットワークを操作してしまいます。初回はGASのプロジェクトの作成、ライブラリの追加、スクリプトの記述と実行までです。

チャットワークのAPIではヘッダーにAPIキー、URLにルームIDを指定します。
Pythonのコードは以下のようになります。

#coding=UTF-8
import requests

BASE_URL = 'https://api.chatwork.com/v2'

#Setting
roomid   = 'YOUR ROOM ID' #ルームIDを記載
message  = 'にゃんぱすー'
apikey   = 'Your API KEY' #APIのKeyを記載

post_message_url = '{}/rooms/{}/messages'.format(BASE_URL, roomid)

headers = { 'X-ChatWorkToken': apikey}
params = { 'body': message }

formatメソッドを使って、ルームIDを付与したURLを生成しています。APIキーはディクショナリ形式でヘッダーに、メッセージ本体はパラメターとして設定します。

実際にPythonからメッセージを送ってみる

requestsモジュールでPOSTメソッドを実行するには以下のように書きます。

requests.post(URL,オプション)

今回はヘッダーとパラメーターをオプションで指定します。

#coding=UTF-8
import requests

BASE_URL = 'https://api.chatwork.com/v2'

#Setting
roomid   = 'YOUR ROOM ID' #ルームIDを記載
message  = 'にゃんぱすー'
apikey   = 'Your API KEY' #APIのKeyを記載

post_message_url = '{}/rooms/{}/messages'.format(BASE_URL, roomid)

headers = { 'X-ChatWorkToken': apikey}
params = { 'body': message }
r = requests.post(post_message_url,
                    headers=headers,
                    params=params)
print(r)

ステータスコードが200が返ってきていれば成功です。ステータスコードは、Webサーバからのレスポンスの意味を表しています。

まとめ

今回はRequestsモジュールを使って、チャットワークにメッセージを送る方法をご紹介しました。

RequestsはWEB APIを利用する際によく使われるモジュールなので、使い方を覚えると応用範囲が広がります。

次回もPythonに関するテクニックをご紹介していきますね。
どうぞ、お楽しみに!

日々、仕事効率化やプログラミングに関することをツイートしています。よろしければ、こちらからTwitterアカウントのフォローをお願い致します。


G Suiteの最新情報を効率よく確実に入手するための4つの方法

$
0
0

members-talk

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

先日、G Suiteユーザー会 第37回Members Talkに参加してきました。

今年の6月にGoogle Could Next Tokyo 2017に参加したときに、G Suite ユーザー会に勧誘いただきまして、当然ながらの即入会。

その流れで、今回はじめてMembers Talkに参加したのですが…これはもう目からウロコの情報がいっぱいいただけました。

特に、私はG Suite情報は頑張ってキャッチする努力は怠ってきたつもりはないのですが、アップデートも多いですし、自分の興味に偏っていたりで、実はなかなか効果的に収集できていなかったことに気づけたのは、大きな成果でした。

ということで、皆さんにも共有。

G Suite最新情報を効率よく確実に入手するための4つの方法です。

では、行ってみましょう!

G Suiteユーザー会とは?

まずは、G Suiteユーザー会について、紹介をさせてください。

G Suiteユーザー会(G Suite Japan Users Group)とは、G Suiteのユーザーが中心で運営するコミュニティで

  • G Suite最新情報の入手や共有
  • 会員同士の親睦や研鑽、情報交換

などを目的としています。

具体的には、今回参加したリアルイベント「Members Talk」や分科会、Google+コミュニティを主な活動拠点にしています。

ちなみに、G Suiteのユーザーなら無料で会員になれます。

詳しくはコチラをどうぞ!

Members Talkとは?

Members Talkは全国で頻繁に開催されていて、例えば東京では半年に一回くらいのペースで六本木のGoogleオフィスで行われています。

今回、私が参加したのは9/13のMembers Talk。17:00-21:00の中で、Googleさん、サポーターさん、ユーザーさんによるセッションと、ディスカッションそして懇親会という、バッチリなボリュームでした。

100人以上の方が参加されていて、毎回参加されている方も多いようで和気あいあいな雰囲気です。軽食とアルコールが出ます。

内容としては、個人的には

  • Keepを使った事例
  • App Makerによるメールツール

そして、今回レポートする「最新情報のゲットの仕方」が大きな収穫でした。

G Suiteの最新情報の取得方法

G Suiteと一言にいっても、サービスの数はたくさんありますし、プランによっても若干内容が違ったりします。

さらに、App MakerやらじJamboardやら、どんどん新しいプロダクトが追加されていく…

もう、これはなかなかG Suiteの最新情報を追いかけるのは大変なんです。

ところが、そこはGoogleさん&ユーザー会。ちゃんと、最新情報をつかむ方法を提供して下さっていました。

そのいくつかの方法についてお伝えします。

G Suiteユーザー会の活用

まずは前述のG Suiteユーザー会に参加することです。

Members Talkの中でもGoogleさんからの最新情報紹介コーナーが定番コーナーとしてあるようです(今回も濃ゆい内容でした)。

また、G Suiteユーザー会に入会すると参加できるGoogle+コミュニティでも最新情報のポストややり取りがあります。

G Suiteユーザーであるならば、会員になっておいて損はないものと思います。

G Suiteアップデートブログ

G Suite アップデートブログはG Suiteの新機能や機能改善に関する公式情報が提供されるブログです。

G Suite チームからの新機能や改善機能に関する公式アップデート情報 (本ブログは G Suite Updates ブログ(英語)を日本語に翻訳したものです)

英語版からは若干遅れますが、日本語版もあります。

RSSリーダーに登録しておくのが王道ですが、以下の「メールで購読」から更新メールを受信するようにすることもできます。

G Suiteアップデートブログ

G Suite 管理者ヘルプ「G Suiteの最新情報」

G Suite 管理者ヘルプの中に「G Suite の最新情報」というページがありまして、表形式で新機能や機能改善を確認できます。

画面はコチラです。

G Suite管理者ヘルプ~G Suiteの最新情報

はっきり言って、超いっぱいあるので確認するのは大変ですので、サービスごとに絞り込んで使うといいかも知れません。

スクリプトで仕込むという手もあるかも知れませんね。

あと、英語版なら「今後のリリース予定」からカレンダーにリリース予定を追加できます。

What’s New in G Suite launch recap

月単位のリリース情報をまとめて確認いたい場合は、What’s New in G Suite launch recapがオススメです。

Summary of monthly updates to Google Cloud products including Gmail, Google Drive, Google Docs, Hangouts, Chrome and other Google products.

ちょっと英語版より更新が遅いですが、日本語版でも月単位のリリースを見やすいGoogle Doc形式かPDF形式で確認することができます。

What's New in G Suite launch recap

最新情報を全然追いかけられてない人は、過去一年分くらいを一気に読みつくしても良いかもしれませんね。

まとめ

G Suiteの最新情報の最新情報を効率よく入手する方法についてご紹介しました。

  • G Suiteユーザー会
  • G Suiteアップデートブログ
  • G Suite 管理者ヘルプ「G Suiteの最新情報」
  • What’s New in G Suite launch recap

あと、もちろんビッグなイベント、Google Cloud Nextもありますね。以下記事のような情報を入手できます。

その進化により企業向けクラウドストレージはGoogleドライブ一択になる
本記事ではGoogle Cloud Next Tokyoで発表された「Team Drivesを使ったファイルサーバのクラウド移行」からGoogleドライブの強みとこれからについてレポートします。
App MakerとGoogle Apps Scriptがアプリケーション開発の民主化を加速する
アプリケーション開発は非IT職からすると遠い存在でした。しかし、Google Apps ScriptとApp Makerがその「民主化」を加速させていることについてGoogle Cloud Next Tokyoからレポートします。

これらの情報を流れで入手することで、G SuiteやGoogleがどの方向に力を入れているのか、今後どういうことが起きそうかということを感じることができるものと思いますよ。

ぜひ、活用していきましょう!

Pythonでリストに要素を追加をする方法、リストの要素を並び替えをする方法

$
0
0
sort

photo credit: nik.golding Newbury Parkrun via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者&Windowsユーザー向け、Pythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。

前回の記事はコチラ。

Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法
プログラミング初心者&Windowsユーザー向けPythonで古いファイルを自動で削除するツールの作り方をお伝えしています。今回はPythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法についてです。

フォルダ内の特定の拡張子のファイルを抽出するところまで進みました。

以下の手順でいうと、2の途中までいった感じですね。

  1. フォルダ内のファイルを全てについてループする
  2. その中でZIPファイルがあれば作成日時とファイル名をリスト化する
  3. リストの数が3を超えていたら、作成日時が古いファイルを削除する

今回はその続きを進めていきますよ。

Pythonでリストに要素を追加をする方法、リストの要素を並び替えをする方法です。

では、行ってみましょう!

前回のおさらい

前回作ったスクリプトはコチラです。

import os
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        print('file:{},ext:{}'.format(file,ext))

os.listdir関数で作業フォルダ内の全てのファイルについて繰り返し、その拡張子が「.zip」であればprintするというものでした。

拡張子を分割するにはos.path.splitext関数を使いました。

appendメソッドでリストに追加をする

まず、拡張子が「.zip」のファイルについて、そのファイル名と作成日時をリストとして蓄積をしていきたいと思います。

リストに要素を追加するにはappendメソッドを使います。

書き方はコチラ。

リスト.append(要素)

ファイルと作成日時をリスト化したいので、二次元リストになりますかね。

リストに要素を追加するスクリプト

このようなスクリプトを作りました。

import os
filelists = []
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        filelists.append([file, os.path.getctime(file)])
print(filelists)

appendメソッドを使うには、リストは空でも用意しておく必要があるので、●行目で空のリストを定義しています。

6行目ですが、appnedメソッドでリストに追加しています。

なお、ファイルの作成日時を取得するにはos.path.getctime関数でしたね。以下記事をご参考ください。

Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
非エンジニア&Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。

実行をしますと…

Pythonでリストに要素を追加する

作成日時はエポック秒なので、パッと見わけがわかりませんが、一応リスト化はうまくいってそうですね。

リストを作成日時降順で並び替える

リストを並び替えるにはsortメソッドを使います。

書き方はコチラ。

リスト.sort(key=itemgetter(インデックス), reverse=True)

まず、itemgetterというのは、operatorモジュールの関数ですので、インポートしておく必要があります。

from operator import itemgetter

それで、インデックスでリストの何番目の要素をソートの基準にするかを指定します。

今回は、二つ目の作成日時を基準にしたかったので、インデックス1を指定すればOK。

また、reverse=Trueは省略可能ですが、省略すると昇順、そのまま書いておけば降順での並び替えになります。

つまり、ここをTrueにしておけば、リストを作成日時の降順で並び替えをすることができるというわけです。

リストの要素を並び替えるスクリプト

スクリプトを以下のように修正しました。

8行目にsortメソッドを追加しています。

import os
from operator import itemgetter
filelists = []
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        filelists.append([file, os.path.getctime(file)])
filelists.sort(key=itemgetter(1), reverse=True)
print(filelists)

こちらのスクリプトを実行すると…

Pythonでリストを降順に並び替える

このように、作成日時の降順でリストを並び替えることができました。

まとめ

以上、Pythonでリストに要素を追加する方法、リストの要素をソートする方法をお伝えしました。

  • appendメソッドでリストに要素を追加
  • sortメソッドでリストを並び替え

では、次回は対象ファイルが一定以上であれば古いファイルを削除する処理を追加していきましょう。

どうぞお楽しみに!

連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム

フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。

  1. Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
  2. Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法

WordCamp Tokyo 2017登壇までのストーリーと終えてみて言いたいたった1つのこと

$
0
0

wordcamp-tokyo-2017

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

先日行われたWordCamp Tokyo 2017。無事に登壇を終えました。

【9/16・9/17】WordCamp Tokyo 2017に登壇します!
直前の告知で恐縮ですが、9/16にWordCamp Tokyo 2017にて登壇をしますのでお知らせです!独立・起業をテーマにした当日のセッションについて、お知らせいたします。

また、たくさんの学びを得ることができました。今回もいくつかレポートを書ければと思っていますよ。

3回目のWordCampで、初めてスピーカーとして参加することができたのですが、その一連について

  • どうやってWordCamp Tokyoのスピーカーになれたの?
  • 登壇の準備はどんな流れ?
  • 実際、登壇してみてどうだった?

とか、そういうことを熱が冷めないうちにレポートをしておきたいと思います。

公募締め切り30分前に慌ててエントリー

あれは今から3カ月前の6/9。

きっかけはズバリ、かん吉さん(@kankichi)のこちらのツイートでした。

かん吉さんは昨年のWordCamp Tokyo 2016で「夢をかなえるWordPress」というタイトルで登壇されていて、がっつり感動をいただいておったんですね。

WordCampはWordPressの利他の精神を再確認しつつ気持ちを引き締める良い機会
いよいよ今年もやってまいりました「WordCamp TOKYO 2016」。今回はそのイベントレポート第一弾、かん吉さんによる「夢を叶えるWordPress」からWordPressの精神について書きます。

でも、WordCampなどというビッグなイベントのスピーカーなんて、夢のまた夢。

…と勘違いをしていたんです。まさか、公募してるなんて。

で、かん吉さんのツイートを見かけてから、時計とにらめっこしながら慌ててエントリーをしたんです。

公募締め切り30分前のことでした。

ちなみに、エントリー時に必要な情報は

  • 氏名
  • 所属会社・学校等
  • Webサイトやブログ等のURL
  • WordPress.org ID
  • WordPress.org アカウントのメールアドレス
  • プロフィール
  • セッションのタイトル
  • 主に誰向けですか?
  • セッションに必要な時間は?
  • セッションの難易度は?
  • どの言語で話しますか?
  • スライドは何語ですか?
  • 過去のスピーカー経験 (なくても申し込めます)
  • セッションの詳細や伝えたいこと、意気込み等をお書きください
  • 8月中旬までにスライドの用意ができますか?
  • WordPressのテーマ・プラグインを配布または宣伝している場合、それらは100%GPLライセンスですか?
  • WordCamp スピーカー規約同意書に同意しますか?
  • セッションの動画や写真の撮影・スライドの公開に同意しますか?
  • セッション動画・写真・スライドの公開に同意しますか?

それはもうがーッと書きました。慌ててましたんで。

あ、登壇を狙っている皆さん、今から話すテーマとか、意気込みあたりをじっくり考えておくとよいですよ。

さて、話は戻りますが、ただのときも選ばれればラッキーくらいの気持ちでいたので、一歩踏み出したことで選ばれなくても「満足」。

そう思っていました。

公募結果のお知らせから当日まで

それから1カ月半経った7/25に来た一通のメール。件名

「件名:WordCamp Tokyo 2017 公募結果のお知らせ」

おお、ちゃんと外れた人にもメールくれるんだ、と思いきや読み進めていくと

ご応募のご返答が遅くなりましたことを深くお詫び申し上げます。
選考の結果、今回はぜひ高橋様にセッション登壇をお願いしたいと思います。

なんと…!?

その後の流れとしては、スピーカー専用のFacebookグループに参加しまして、そこで登壇にあたっての連絡事項や、当日までの準備についてのやり取りをします。

大まかな段取りとしては

  1. タイトル、自己紹介文、アウトラインの提出(あとTシャツのサイズも)
  2. スライド初稿提出
  3. リハーサル
  4. スライド最終稿提出

という流れになります。

はっきり言って、すっごく丁寧にサポートしてくださいます。

そして、初めての登壇者に関しては、ハングアウトを使ったリハーサルまでお付き合いいただくので、なんとまぁ安心して当日に臨めるわけです。

私の場合は、セッションはモンキーレンチの北島さん(@inc2734)、よつばデザインの後藤さん(@428design)と合同だったので、WordCampセッション班の皆さんと5人でワイワイとリハーサルをして盛り上がりました。

ハングアウトミーティング、楽しいっすね。

前夜祭

登壇の前日、前夜祭にご招待頂きました。

私、性格としてはビビりでアウェイは苦手なのですが、一方で食うなら皿までというところもありまして、エイっと参加しました。

新宿の居酒屋さんでの開催でしたが、皆さん、全国いや全世界から久しぶりに集結というわけで、たいへん盛り上がってました。

完全アウェイの私、スポーツで言えば防戦一方ではありましたが、なんとか何名かの皆さんと、はじめましてのご挨拶をして無事に帰宅。

こういう一歩が大事ですもんね。

当日、いよいよ登壇

さて、当日。いよいよ登壇です。

ランチミーティングとは言え、たくさんお集まりいただきました…!

また、登壇直前に、PCがエラー画面になっていて慌てて再起動かけるという、緊張感あふれる出来事がありました。

でも、私には後藤さん、北島さんも、スタッフの皆さん、心強い味方がいます。

また、ハングアウトミーティングのリハーサルもありました。

そのおかげで、なんとか落ち着いてお話できたかと思います。

スライドはコチラです。

私がこうして独立して、今も立っていられるのも、ブログそしてWordPressのおかげ。

その価値について知っていただきたいということで、話をさせて頂きました。少しでも聴かれた皆さんのお役に立てれば嬉しいです!

ちなみに、最後の質問で

ブログのツールとして、なぜWordPressを選択しているのですか?

という質問をいただきました。

自前サーバーであれば自分のコンテンツの所有と提供の継続性が担保できるし、それであればテーマやプラグインがそろっているWordPressが一番、という回答をさせて頂きました。

それももちろんありますが、私がWordPressを使っている最大の理由はコチラです。

好きだからです。

まとめ

さて、こうして登壇を終えたのですが、本記事で言いたいことはたった一つだけです。

一歩踏み出そう!

そうすれば、WordCampという1000人クラスの大きなイベントで登壇できるチャンスを得ることができます。

うっかり、選ばれたとしても、なんとかなります。

なぜなら、WordCampはサポートが本当に手厚い!

だから大丈夫です。元気よく、ナイスな一歩踏み出しましょう。

VBScriptでドラッグアンドドロップしてファイルのフルパスを取得する方法

$
0
0

こんにちは!あつもり(@atumori17)です。

久しぶりに「初心者でも簡単!VBScriptでWindows効率化」シリーズですっ。今回は「ドラッグアンドドロップしてファイル名とフルパスを取得する方法」を紹介していきます。

日常業務の中でファイル名のフルパスが知りたいっていうケースがあると思います。例えばチーム内でファイルを共有したい場合。

ネットワークフォルダなどにあるファイル名のフルパスを書いて「ここにファイルが置いてありますよって」ってやると思います。そんな時にすぐにファイルのフルパスがわかると便利ですよね。

複数ファイルのフルパスを調べるときに便利

実は今回紹介するアプリケーションを使わなくても簡単に調べられる方法があるんです。それはShiftキーを押しながら右クリックして「パスのコピー」でファイルパスをコピーできちゃいます。

「えっ?じゃあ今回のアプリケーションってそんなに便利じゃないじゃん」って思いますよね。でも複数のファイルを調べたい場合はどうでしょう?1回1回Shiftキーを押しながら右クリック・・・って面倒ですよね。

今回のアプリケーションは複数のファイルパスを一度に調べられるので便利ですよ。

ファイルのフルパスを取得するスクリプト

それではまずはスクリプトの全文を紹介します。テキストエディタを開き、下記のコードを入力します。全て入力し終わったら「ファイルのフルパス取得.vbs」などのファイル名でデスクトップに保存します。

Option Explicit

    'ドラッグアンドドロップで取得したファイルパスを変数に入れる
    Dim GetPathArray
    Set GetPathArray = WScript.Arguments

    'ファイルシステムオブジェクト
    Dim objFSO
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'イテレータ
    Dim pt

    'ファイルの数ぶんループする
    For Each pt in GetPathArray

        '取得したファイル名
        Dim FileName
        FileName = objFSO.GetFileName(pt)

        'ファイルのフルパスをInputBoxで表示させる
        pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt)

    Next

    'オブジェクト変数をクリア
    Set objFSO = Nothing

プログラムコードの解説

Argumentsプロパティからファイルパスをコレクションとして取得する

WScriptオブジェクトのArgumentsプロパティを使うことでパラメータを取得することができます。パラメータとはプログラムに渡された値のことです。ここではドラッグアンドドロップしたファイルのパスになりますね。

パラメータはコレクションとして取得していますので複数ファイルのフルパスが格納されていいます。

Set オブジェクト変数 = WScriptオブジェクト.Arguments

とすることでコレクションとして取得したファイルのフルパスをオブジェクト変数の中に入れています。

For Each文でコレクションから1つ1つのフルパスを抜き出す

Argumentsプロパティでコレクションとして取得したフルパスですが、複数ファイルあった場合、1つ1つのファイルのフルパスにバラしてあげなければ使えません。そのためFor Each文を使い取得したファイルの数ぶんだけ繰り返し処理を行います。

下記のようにすることでコレクションの中の要素の数だけループさせることができます。つまりドラッグアンドドロップしたファイルの数だけ繰り返していることになります。

For Each オブジェクト変数 In コレクション
処理
next

上のコードで13~27行目の部分です。

'ファイルの数ぶんループする
    For Each pt in GetPathArray

        '取得したファイル名
        Dim FileName
        FileName = objFSO.GetFileName(pt)

        'ファイルのフルパスをInputBoxで表示させる
        pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt)

    Next

GetFileNameメソッドでファイル名を取得する

ファイル名を取得するにはファイルシステムオブジェクトのGetFileNameメソッドを使います。

ファイルシステムオブジェクト.GetFileName(ファイルパス)

ファイルパスにはファイルのフルパスを指定します。

ファイルシステムオブジェクトはファイルやフォルダを操作できる便利なオブジェクトです。ファイルシステムオブジェクトについては過去の記事でも紹介していますので参考にしてみてください。

VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
VBScriptでファイルシステムオブジェクトを使ってシンプルにテキストファイルに保存するテクニックの紹介です。せっかくWEBスクレイピングでWEBサイトから必要な情報を取得しても、保存する場所がなければ取得したデータを使うことはできないからです。

InputBox関数でファイルのフルパスを表示させる

InputBoxは通常、ユーザーに対して文字列の入力をしてもらうために使うものですが、今回の場合、ファイルのフルパスを表示させるのに使います。どうしてこのような使いかたをするかは後ほどご説明します。

InputBoxは次のようにして使います。

InputBox(表示させる文言,タイトル名,テキストボックス内の値)
「テキストボックス内の値」にファイルのフルパスを入れています。

下の図を見てもらうとイメージがつかみやすいと思います。

今回のプログラムコードを見てみましょう。上記のコードで21行目にあたります。

pt = InputBox("ドラッグアンドドロップしたファイル名 " & FileName,"ファイルのフルパスを表示", pt)

InputBox関数の引数に次のような値を入れているのがわかりますね。

  • 「表示させる文言」にGetFileNameメソッドで取得したファイル名
  • 「タイトル名」にファイルのフルパスを表示
  • 「テキストボックス内の値」にArgumentsプロパティから取得したフルパス

InputBox関数を使うことでフルパスをコピーできる

ファイル名とフルパスを表示させるだけならMsgBox関数でもできるんじゃないか?と思ったかたもいるかと思います。でもInputBox関数を使ったのにはきちんとした理由があります。

下の画像のようにInputBox関数を使えば、テキストボックス内に表示させたフルパスをコピーすることができます。

しかしMsgBox関数だと表示させたファイルパスをドラッグして選択できないため、コピーができないんです。

実は・・Ctrl + C を使えばコピーできますが、コピーしたデータをテキストエディタに貼り付けると下の画像のようになってしまいました・・

これでは使いにくいですよね。以上のことがInputBox関数を使っている理由です。

プログラムの説明は以上になります。

アプリケーションを実行してみる

では実際に起動してみます。ファイルを複数選択し、デスクトップにある「ファイルのフルパス取得.vbs」にドラッグアンドドロップします。

InputBoxにファイルのフルパスが表示されました。「テスト1.txt」「テスト2.txt」それぞれのファイルパスが表示されます。

まとめ

いかかでしたか?今回の内容をまとめると以下のようになります。

  • WScriptオブジェクトのArgumentsプロパティでフルパスをコレクションとして取得できる
  • GetFileNameメソッドでフルパスからファイル名を取得できる
  • InputBoxは使い方次第で便利に使える関数です

以上になりますっ。お疲れ様でした~。

連載目次:初心者でも簡単!VBScriptでWindows効率化

Windowsを操作できるプログラミング言語「VBScript」を使って、日々の業務効率化! テキストエディタで簡単にできますので初心者にもおすすめです。
  1. 初心者でも簡単プログラムでWindowsの効率化!VBScriptをやってみよう
  2. VBScriptで複数のファイル・フォルダ・アプリケーションをダブルクリック一発で開く方法
  3. VBScriptで曜日ごとに起動するファイルやフォルダ、アプリケーションを変える
  4. VBScriptでドラッグアンドドロップしてファイルのフルパスを取得する方法

WordCamp Tokyo 2017に参加して「貢献」について改めて考えさせられた話

$
0
0
Contribution

photo credit: Visions Service Adventures GroupN2-005 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

皆さん、「貢献」してますか?

普段の仕事や、家庭や、地域活動で、「貢献」のチャンスはあると思いますが、してますか?

感覚的には「貢献をしてるよ!」と、元気よく即答できる人は少ないのではないかなと思います。

さて、先日WordCamp Tokyo 2017に参加してきました。今回は光栄なことに、登壇もさせて頂きました。

それで、毎年そうなのですが、WordCampでは「貢献」というキーワードをよく耳にします。前回はコチラ。

WordCampはWordPressの利他の精神を再確認しつつ気持ちを引き締める良い機会
いよいよ今年もやってまいりました「WordCamp TOKYO 2016」。今回はそのイベントレポート第一弾、かん吉さんによる「夢を叶えるWordPress」からWordPressの精神について書きます。

今回も、ご多分に漏れずそうでした。

ということで、WordCampを通して「貢献」について改めて考えさせられたことについて2017年版、書き留めておきたいと思います。

WordPressは貢献でできている

知らない人のために書いておくと、WordPressは全世界のボランティアの皆さんが開発をしています。

もちろん、WordPressに近い仕事をしている方も多いと思うのですが、それであったとしても、本来のお給金は別でちゃんと頂きながら、その余った時間とモチベーションでWordPressに携わってくださっています。

WordPressを形作るどの1文、1文字を切り取ったとしても、それは全て「貢献」でできています。

信じられますか?

ボランティアで作られているものが、全世界の3割近くのWebサイトを、CMSの6割を支えています。

WordCampというイベント自体もそう。運営スタッフの皆さんは朝から晩まで働き続け、私のような新参ものが安心して登壇できるように、原稿のチェックやリハーサルをしてくださいます。

これも「貢献」で出来上がっています。コントリビュートです。

そして2日目のコントリビュータデイでは、それこそWordPressコア、テーマ・プラグイン、フォーラム回答、レビュー、翻訳など、メンターさんの助けを借りながら様々な貢献をする一日です。

出られなくて申し訳なさでいっぱいです。

継続性が担保できない貢献はしなくていい

ただし、WordPressコミュニティのいいところは「できる人ができることをやりなね」という構えということです。

基調講演「wp_next_step – WordPressの次のステップ」で、高橋文樹さんもおっしゃっていたのですが、

  • コアなどのリポジトリにコントリビュートする
  • テーマ・プラグインを使って公式リポジトリに公開
  • 翻訳・公式ドキュメントの整備
  • WordCampのイベントスタッフ
  • ブログに書く
  • ビジネスを成功させる
  • 参加・主催する
  • 好きっていう

そうね、個人てきには、下半分くらいは、なんとかできているかな…。

さて、話を戻すと、いくら貢献とは言え、無理しちゃうと継続性が担保できないので長く続けられる貢献の仕方をしようね、という話です。

また、プレミアムテーマを作るとか企業と協力するとか対価をもらえる仕組みがあるといいよね、とも

そりゃそうです。お互い、継続的に貢献できる&してもらうのが一番です。無理したら脱落しちゃいますもんね。

WordPressは何人が支えている?

WP-CLIコミッターであり、VCCWのリード開発者の宮内さん、セッション「WordPressプロジェクトのこれから」でお話も聴きつつ、懇親会でがっつり話をする機会がありました。

宮内さん曰く

WordPressは世界中の何万人が集まって開発していると勘違いされているけど

…あ、はい、そう思っていました。

本当に頑張っている人は何人かしかいない

というようなことをおっしゃっていました。はっきり言ってトンカチで頭ぶん殴られた感じでした。

その何人かに、全世界のWordPressユーザーがおんぶにだっこ、そんな絵面が浮かんでしまいました。

できる人が貢献すればいいという構えながらも、ギリギリでやっているんだな…というのが垣間見えました。

私も、おんぶされてる一人。

そのWordPressを使って、今日も情報を集め、コミュニケーションをとり、ブログを書き、集客をし、生活をし、満足を得ているのです。

以下のスライドでは、WordPressの頑張っている皆さんがいかにセキュリティフォールと戦っているかという熱い話が聴けました。感謝しかありません。

独立から3期目、貢献について考える

テーマ「ITへの貢献」

さて、独立してから3期目に入りまして、ようやく収益的にはなんとなく形になってきたところではあります。

独立起業して2年経つとこういう感じになるよという話とそのポイント振り返り
独立をしてから2年が経ちました。今回はこの2年について振り返りつつ、これから起業をされる方、起業を検討される方に「独立起業して2年経つとこういう感じなんだよ」という一つの形とポイントをお伝えできればと思います。

それで、ここから、何を目指していくべきか。

一般的には、社員増やして事業を拡大していくようなことを考えるのかも知れませんが、今思っていることは「ITへの貢献」なんですね。

私自身、WordPressはもちろん、Excel VBA、チャットワーク、Googleをはじめ、様々なITに支えられて来てここまで来れました。

それで、それらのITの普及促進という視点では

  • ブログを書くこと
  • 書籍を書くこと

などで、少しばかりの貢献をできつつある、そしてもっと他にできることはないかなと考えているところです。

貢献は生存戦略

「何をキレイごとを…」

って思います?

いやいや、違うんです。逆にそれが生存戦略なんです。

今月の売上のために、無理やり商品売って、お金が入って、でも固定費で飛んでいくから、また来月数字追って…こういうのはしんどい。何にも残らない。

一方で、「貢献」は不思議と蓄積されていきます

むしろ、回りまわってビッグになって、自分にびっくりするような新たなステージを用意してくれたりします。

実際、WordPressがこうしてその成功を見せてくれています。

貢献していますか?

皆さんは、貢献してますか?

WordPressもそうですし、たくさんのITがそれこそ無料だったり、激安で使えるようになってきました。

なのに、「…なんかクソだ」とか「この…使えん」とかTwitterで文句ばっかり言ってません?

もし、そのツイートに1分でも時間使うんでしたら、どうすればクソじゃない使い方ができるのか、どういう使い方だったらよいのか、考えてみませんか?

むしろ、良いサービスについてはブログを書いたり、お世話になっているテーマやプラグインに「★」をつけてみませんか?

先人たちが素晴らしいIT技術を構築してくれて、またその良さやノウハウを発信してくれているから、技術は進歩して、私たちはその価値を享受することができています。

その技術の進歩に、そこに少しばかりでも参加しませんか?

と、今回もWordCampでは「貢献してますか?」という問いをずっと投げかけられ続けました。

そして、それがなんとも心地が良いというわけで。

また、来年も参加して、その気持ちを引き締めてもらおうと思っています。

皆さんも、ぜひ。

Viewing all 2097 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>