2017-07-02 1 views
-1

最初のpythonプログラム。 IOTアプリケーションのための小さなデバイスを実行します。 Pythonが簡単に解析できるように小さなデータファイルを最適に整理する方法に関するアドバイスがありますか? TCP/IP経由でリモートWebサーバーからファイルを取得する。値の簡単なファイルの解析

私は5つの整数値Switch0 = 0、スイッチ1 = 0、スイッチ2 = 1、スイッチ3 = 0、Switch4を持っている= 5へのpythonのためにそれを容易にするために、このファイルを整理する簡単な強力な方法です何

それを解析する? どのように解析するのですか?私は本当に値が必要です:スイッチ[0,0,1,0,5]、しかし数字ではなく、テキスト。

おかげ

答えて

0

Edit: As pointed out by Peteris in comment, pickle is a security risk. Use it carefully.

クライアントとサーバの両方がPythonスクリプトを実行している場合は、私が辞書にデータを酸洗し、それを上に送る示唆しています。

PickleはPythonオブジェクトをシリアライズできるPythonのライブラリです。ピックルして送信します。次に、受信したデータを復調します。

ピックアップされたバイナリファイルは、Pythonの読み書きが容易になるという利点があります。 2つの異なる環境を使用している場合、テキストファイルを使用するより簡単な方法が存在するかどうかはわかりません。 documentationをチェックしてください。

+0

Pickleはセキュリティ上の危険なフォーマットです。すべてのデータを絶対に制御する場合、つまりクライアント/サーバー接続が暗号化されており、「他端」があなたが制御しているものであることを完全に確信している場合にのみ使用してください。そうしないと、攻撃者によって制御された何かをunpicklingすることは、攻撃者があなたのマシン上で任意のコードを実行できることを意味します。ピクルスを使用できないようにする多くのシナリオでは、データのみのフォーマットが使用されます。 protobuf、json、csv、または任意の平文エンコーディングがはるかに良いでしょう。 – Peteris

+0

それは本当です。それは趣味のプロジェクトのようだった。だから簡単な方法。免責事項を含む。ありがとう。 –

1

あなたは「スイッチ[0,0,1,0,5]」のようなあなたのswitches.txtファイルの内容に置けばよく、その後、おそらくあなたは、このようにそれらを抽出することができます。クライアント上で

with open('switches.txt', 'r') as f: 
    data=f.read() 

data = data[data.index('[')+1:data.index(']')] 

switches = data.split(',') 

Switch0 = int(switches[0]) 
Switch1 = int(switches[1]) 
Switch2 = int(switches[2]) 
Switch3 = int(switches[3]) 
Switch4 = int(switches[4]) 
+0

ありがとうございます。私はこれを使用しています。 トレースバック(直近の最後のコール): ファイル ""、1行目、またはその両方でエラーメッセージが表示されます。エラーメッセージが表示されます:lines = lines [lines.index( '[')+ 1:lines.index( ']' TypeError:型strがバッファAPIをサポートしていません 'type(lines)'でテストし、クラス 'bytes'を取得しますなぜこれが機能しないのですか?ありがとう – Viking

+0

@vikingタイプ(行)は、それを働かせるために 'str'にする必要があります。あなたのコードを表示する方が良いでしょう。おそらくあなたは 'r'の代わりに 'rb'モードであなたのファイルを開くでしょう。 –

+0

@Vikingこの場合、 'str'ではなく' bytes'を返します。 'r 'モードを使うか' str(lines、utf-8') 'や' lines.decode( 'utf-8') 'のようなものを使って' 。 –

0

をまた、gzipを使ってファイルを保存することもできます。 GZIPの使用方法は簡単です:

書き込み:

import gzip 
content = "Lots of content here" 
with gzip.open('file.txt.gz', 'wb') as f: 
    f.write(content) 

読む:

import gzip 
with gzip.open('file.txt.gz', 'rb') as f: 
    file_content = f.read() 

のgzip here

についての詳細を確認してくださいあなたは常にコンテンツを読むことができ、値を解析しますファイルに書き込む:

import gzip, re 
content = "Switch0=0,Switch1=0, Switch2=1, Switch3=0, Switch4=5" 
d = dict(re.findall(r'([^=]+)=([^=]+)(?:,|$)', content)) 
values = [v for v in d.values()] 
with gzip.open('file.txt.gz', 'wb') as f: 
    f.write(str(values)) 

これは、値のみをファイルに書き込む必要があります。上記の読み取り例を使用してファイルを読み取ります。

関連する問題