2017-06-30 6 views
1

私はPythonにはかなり新しく、私が取り組んでいるプロジェクトの全体的な目標は、将来の簡単な入力を可能にするSQLite DBをセットアップすることですプログラマー以外の人(これは、技術的にすべて有能な少人数のグループの人のためのものです)。私がこれを達成しようとしているのは、簡単なテキストエディタを使って新しいデータエントリを.pyファイルとして保存し、DBに値を入力する関数内の.pyファイルを開くことです。これまでのところ私が持っている:Python3.5で器具を渡すための関数で別の.pyファイルを開く

def newEntry(material=None, param=None, value=None): 
     if param == 'density': 
      print('The density of %s is %s' % (material, value)) 

    import fileinput 
    for line in fileinput.input(files=('testEntry.py')) 
     process(line) 

それから私は、単純なテキストエディタでnewEntryを端末内で実行されたときに、うまくいけばnewEntry.pyによって呼び出されますtestEntry.pyというファイルを作成しました。ここでの考え方は、ユーザは、カッコ内に入力した引数を関数名に入れるだけでよいということです。 testEntry.pyは単純に:

# Some description for future users 
    newEntry(material='water', param='density', value='1') 

端末でnewEntry.pyを実行すると、何も起こりません。私が知らない他のファイルの中で.pyファイルを開いて実行する別の方法がありますか?助けてくれてどうもありがとう。

+1

「普通のユーザー」にコードを書くよう指示した場合には、無数のバグは扱わなければならないが、それは恐ろしく不安かもしれない。私は['YAML'](https://en.wikipedia.org/wiki/YAML)のような人にやさしい構造化されたフォーマットを使うことをお勧めします。これは[' ruamel.yaml'](通常の[INIファイル](https://en.wikipedia.org/wiki/INI_file)とビルトインの['configparser(https://yaml.readthedocs.io/ja/latest/) '](https://docs.python.org/3/library/configparser.html)モジュールです。ユーザーが言語よりもデータ形式を教える方が簡単です。 – zwer

+1

これを反映するために私の質問を少し編集しましたが(うまくいけば分かりますが)、ユーザーはすべてnewEntry()関数内に入力したいデータを配置するだけです。それは小さなグループのためであり、すべてのユーザーは技術的に有能な人です – LosOsos

答えて

1

あなたのソリューションは機能しますが、コメント投稿者が述べたように、それは非常に安全ではなく、より良い方法があります。 process(...)メソッドを仮定すると、任意のPythonコードを実行しているだけで、ファイルの削除(非常に悪い)などのシステムコマンドの実行に悪用される可能性があります。

各行に一連のnewEntry(...)からなる.pyファイルを使用する代わりに、ユーザーに適切な列ヘッダーを含むCSVファイルを作成させるようにしてください。私。

material,param,value water,density,1

次に、新しいエントリを追加するには、このCSVファイルを解析:

with open('entries.csv') as entries: 
    csv_reader = csv.reader(entries) 
    header = True 
    for row in csv_reader: 
     if header: # Skip header 
      header = False 
      continue 
     material = row[0] 
     param = row[1] 
     value = row[2] 
     if param == 'density': 
      print('The density of %s is %s' % (material, value)) 

ユーザーは、Microsoft Excel、Googleシート、または作成するために、.csvファイルをエクスポートすることができ、他の表計算ソフトを使用することができます/これらのファイルを編集し、あらかじめ定義されたヘッダーを持つユーザーにテンプレートを提供することができます。

+0

私はこれを提案してそれを構築しましたが、プロジェクトのより広い範囲を担当する人はnewEntry(...)の方法を好んでいます。それほど重要ではなく、変数に明示的にラベル付けされているので、値を誤って割り振る機会が少なくなります(そうです)。 – LosOsos

関連する問題