はじめに

私のデスクトップPCには、Ubuntu16.04 LTSが入っていました。
しかし16.04は、WiMAXとの相性が悪く、ネット接続が大変不安定でした。
そこで、この年末年始に思い切って18.04へ更新することにしました。

私は通常、このUbuntuが入っているデスクトップPCに、ディスプレイやキーボードを接続していません。
代わりに、WindowsからSSHを使ってアクセスしています。

 

Ubuntu側のSSHの設定は、以下ページを参考にしました。
https://www.karelie.net/install-ssh-ubuntu-1804/

UbuntuのIPアドレスは固定した方がWindowsからアクセスする際に便利です。
私は以下のページを参考にしました。今はGUIで設定できるんですね。便利になりました。
https://linuxfan.info/ubuntu-1804-desktop-static-ip-address

SSHクライアントは、Windows10標準のソフトを使用しています。
https://news.mynavi.jp/article/win10tips-237/

 

このままだと、WindowsからUbuntu側へ、ファイルを転送するのが面倒です。
そこで、WindowsとUbuntu間のファイル転送を簡単に行うために、FTPを準備することにしました。

この記事は、それを実現した時の覚書です。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Ubuntu 18.04 LTS

 

1.Ubuntu側の設定

vsftpdをインストールします。

vsftpdの設定ファイルを開きます。私はviエディタを使っています。

私は、以下のように設定項目を変更しました。
(参考)http://park12.wakwak.com/~eslab/pcmemo/linux/vsftpd/vsftpd4.html

次に、vsftpd.chroot_listをetcの下に新規で作成します。
このファイルにUbuntuのユーザ名を追加します。

最後に、vsftpdを有効にして再起動します。

 

 

2.Windows側の設定

私は今回、古くから使い慣れているFFFTPという、FTPクライアントソフトを使用しました。
以下ページからダウンロードして、インストールしてください。
https://forest.watch.impress.co.jp/library/software/ffftp/

 

FFFTPを開き、メニューバーから接続を選択します。

 

ホスト一覧というウィンドウが開きます。新規ホストを選択してください。

 

ホストの設定というウィンドウが開きます。以下を入力し、OKを押してください。

  1. ホストの設定名(任意の名前)
  2. ホスト名(UbuntuのIPアドレス)
  3. ユーザ名(Ubuntuのユーザ名)
  4. パスワード

 

ホスト一覧ウィンドウに戻りました。接続を押してください。

 

暗号化の状態の保存というウィンドウが開きます。はいを選択してください。

 

左側にWindowsのディレクトリ、右側にUbuntuのディレクトリが表示されれば、接続成功です。

 

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! ←この記事いいね!
Loading...

はじめに

先日、Pythonを使って、データを解析する機会がありました。
そんな時、「簡単なサンプルコードがあったら便利だ」と感じたため、ブログに残しておこうと思います。
サンプルコードは好きに使ってもらって構いません(大したコードではないので)
「もっとこうしたらいいのに」というご意見がありましたら、コメント欄までお願いいたします。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Anaconda3 5.3.0
  • Python 3.7.0

 

例題

今回、例として用意した解析元のデータは、過去の気象データです。
この気象データは、気象庁のホームページから誰でも無料でダウンロードできます。

過去の気象データ・ダウンロード
https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

ここでダウンロードできる気象データはCSVです。
Pythonはモジュールを使えばCSVも簡単に使いこなせるのですが、今回はテキストに落とし込んでいます。
(CSVファイルを開いて、テキストエディタにコピペしただけです)
以下に、解析元データ(気象データ)の一部抜粋を添付します。
この気象データを今回3つ用意しました。

weather_data1.txt / weather_data2.txt / weather_data3.txt :

ここから日付と平均気温のみを抽出することが、今回の課題です。
日付は一番左の列、平均気温は日付の隣の列です。他は不要なデータとします。

 

サンプルコード

サンプルコードは以下の通りです。

 

一つ一つ解説します。

これは、正規表現を使うようにするためのライブラリです。

 

これはファイル名です。今回ファイルが3つあるので、in_filesというリストに格納しています。

 

in_filesというリストから、ファイル名を一つ取り出してin_fileに入れています。
with openを使ってファイルを開きます。
第一引数にはファイル名を、第二引数は読み込み用でファイルを開くことを指定しています。

‘r’ とすれば、読み込みモード
‘w’ とすれば、書き込みモード
‘a’ とすれば、追記モード

ちなみにwith openで開いたファイルは、Closeが不要です。
as frで、開いたファイルを以降、frとして扱います。
for line in frで、1行ずつファイルを読み込むことができます。

 

re.matchは、文字列の先頭がパターンにマッチするかを調べます。
第一引数は検索したい正規表現を、第二引数は検索元を入力します。

正規表現の中で、カッコで囲んでいる箇所があります。
こうすることで、カッコで囲まれた部分にマッチした文字列を、”group(番号(1始まり))”とするだけでタプルで取得できます。
今回は、日付をgroup(1)、気温をgroup(2)としています。
この検索結果をm1に格納します。もし見つからなければm1にはNoneが入ります。

 

m1がNone以外、すなわち見つかった場合、日付と平均気温を出力します。
まず出力ファイル名を決めます。今回はファイル名に’convert.txt’を追加したものにしました。

出力ファイルを”追記モード”で開いて、それをfaとして扱います。
次にfa.writeで出力ファイルに書き込みます。

m1.group(1)は日付を、m1.group(2)は平均気温を意味します。
日付と平均気温の間には、タブを入れました。最後に改行をしています。

 

出力結果

以下が出力結果です。
ファイルと同じフォルダに、出力ファイルが生成されていると思います。
日付と平均気温だけが綺麗に抽出できています。

weather_data1convert.txt / weather_data2convert.txt / weather_data3convert.txt

 

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! ←この記事いいね!
Loading...

はじめに

Pythonを使って、UART等のシリアル通信を行う場合、PySerialを使うと簡単に実現できます。
その際、PySerialを使う前の初期設定で、COMポートを指定する必要があります。

COMポートはデバイス毎に番号が変わってしまいます。
デバイスが変わる度に、デバイスマネージャからCOMポートを調べるのは面倒です。

そこで今回は、COMポートを自動的に取得するサンプルプログラムをご紹介します。
ついでに、PySerialを使ったシリアル通信のサンプルプログラムも掲載しています。
サンプルプログラムはご自由にお使いください。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Anaconda3 5.3.0
  • Python 3.7.0

 

サンプルコード

まずはMain関数を説明します。

ヘッダに”serial”をimportすることで、PySerialを使用することができます。
search_com_port()は私が作成した関数です。
後ほど説明しますが、この関数は有効なCOMポートを返します。

serial.Serial関数は、serというインスタンスを作成しています。
この関数の引数には、有効なCOMポートを指定する必要があります。
その他、baundrateや、通信のタイムアウト時間を設定しています。

w_dataは、送信するデータです。
r_sizeは、受信するデータのサイズです。
uart_write_read関数は、私の作成した関数です。この中でデータの送受信を行います。

 

次に、search_com_port関数を説明します。

serial.tools.list_ports.comports関数は、PCに接続されているCOMポートをすべて返します。
それをcomlistというリストにいったん格納(append)します。

私の使用しているPCでは、使いたいCOMポートがcomlist[0]に格納されていたため、それを一旦、use_portに格納します。関数の最後で、use_portを戻り値として返しています。

 

次に、uart_write_read関数を説明します。

ser.write関数は、データを送信する関数です。これはPySerialで用意している関数です。

ser.read_until関数は、データを受信する関数です。これはPyserialで用意している関数です。
この関数の引数に、受信サイズを指定すると、指定サイズが受信されるまで待ってくれます。

最後に受信データを返しています。

 

最後に今までのソースコードをまとめて記載すると、以下のようになります。

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! (11いいね!)
Loading...