質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1295閲覧

Pythonのif文?

退会済みユーザー

退会済みユーザー

総合スコア0

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/10 18:38

編集2019/01/11 04:56

前提・実現したいこと

①同じネットワーク(Wi-Fi)に接続しているデバイスのMACアドレスを5分間隔程度で定期取得。
②取得したデータを、CSVファイル形式を用いて、0,1のダミー変数(そのMacアドレスがあれば1、なければ0)を用いた時系列表にする。新規に取得したMacアドレスは随時ラベルに追加する。
③完成したデータをもとに、グラフにする。
というような内容を.pyファイルを作成し、ターミナルで実行して、こちらが終了させるまで動き続けるコードを書きたいと思っています。

発生している問題・エラーメッセージ

①に関しては、ほぼほぼできていると思っています。
実際指定した間隔で応答のあるデバイスのMacアドレスの一覧をCSVファイルに起こすことはできました。
しかし、②に関して全く手詰まりです。なにぶんプログラミングに不慣れなもので、
1, どうやってそのMacアドレスが今まで出てきていないものか判断するか。
2, どうやって0,1の数字を用いた表形式に表せるか。
の2点がさっぱりできません。if文を使うのではないかと思ってはいるのですが・・・
途中までのソースコードを載せておきます。

エラーメッセージ

該当のソースコード

Python

1import subprocess 2import pprint 3from time import sleep 4 5cmd = "sudo arp-scan -l --interface en0 | grep -i '[0-9A-F]\{2\}(:[0-9A-F]\{2\})\{5\}' | tr '\t' '|' | cut -d '|' -f2 | cut -d '|' -f1" 6loop = [ 0 ] 7file = open( " Macad.csv " , "w+") 8for i in loop: 9 out = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True, universal_newlines=True).split()[0:-1] 10 new_out = ',\n'.join(out) 11 address_list = [] 12 address_list.append(new_out) 13 pprint.pprint(address_list, width=15, compact=True) 14 new_flag = 1 if new_out in address_list else 0 15 ex_out = "{},{}\n".format(new_out, new_flag) 16 file.write(ex_out) 17 sleep(5) 18 loop.append(i + 1) 19

試したこと

if文を試そうとしたのですが、どうやって今までのファイルの中に同じ文字列が存在しているかなどのため仕方がわからず断念しました。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

firedfly

2019/01/12 05:54

新しい質問「Python 表作成」を見ました。 求める表、現在の出力が記載されていて、ぐっと良い質問になってますね。 ぶじに問題が解決することを願っています。
退会済みユーザー

退会済みユーザー

2019/01/12 05:59

本当にありがとうございました とても助けられました!
guest

回答1

0

ベストアンサー

こんにちは。

1, どうやってそのMacアドレスが今まで出てきていないものか判断するか。

検知したMacアドレスをリストに蓄えて、inで確認するのはどうでしょう。

Python

1list = ["A", "B", "C"] 2print("B" in list) # True

次回起動時もそのリストを使いたいならpickleで簡単に保存・読込できます。
Python: オブジェクトを漬物 (Pickle) にする - CUBE SUGAR CONTAINER

2, どうやって0,1の数字を用いた表形式に表せるか。

既出かの判断で0,1に変換して
テキストファイルにカンマ区切りで書き込めば、りっぱな表形式です。
(CSVの仕様を書いてないですが、時刻とアドレスと0/1でしょうか)

Python

1new_flag = 1 if out in address_list else 0 2new_out = "{},{}\n".format(out, new_flag) 3file.write(new_out)

投稿2019/01/10 23:57

編集2019/01/11 03:50
firedfly

総合スコア1131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/11 02:53

回答ありがとうございます! 1,についてはなんとなくわかったのですが、2,に関しては具体的にどんな風なコードを書いたらいいものなのでしょうか?
firedfly

2019/01/11 03:04

回答に追記しました。ご確認くださいまし。
退会済みユーザー

退会済みユーザー

2019/01/11 04:58 編集

さらなる回答ありがとうございます。さらに質問を重ねて申し訳ないのですが、1,について、何と無く分かりそうと言ったものの、実際にやってみるとなかなかうまく行きません。 既存のファイルに新たな要素だけ追加して記述していくというようなことは可能なのでしょうか? 現在のコードを質問のところへ載せました。
firedfly

2019/01/11 05:05

ポイントは file = open( " Macad.csv " , "w+") のところです。 ファイルを"w+"モードで開くと上書きされます。"a+"モードで開くと追記されます。 [【技術】pythonのopen関数の第二引数の違いが分かった - エンジニアリングとお金の話](http://hatakazu.hatenablog.com/entry/2012/07/06/060913)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問