2

いくつかの変数を含むテキスト ファイルがあります。それらのほとんどは私の Bash スクリプトで使用されていますが、Python スクリプトにも同じテキスト ファイルを使用したいと考えています。Python 用に適切にフォーマットされていない行については、スクリプトで無視する必要があります。適切にフォーマットされているものについては、スクリプトでチェックして、探している変数である場合はそれを使用します。

import sys import re

for ln in open("thefile.txt"):
        m = re.match(r"(?P<varname>[^=]*)\s*=\s*(?P<value>.+)", ln)
        if m:
                varname = m.group("varname")
                value_string = m.group("value")
                value = eval(value_string)
                print value
                # so if the variables name is THISVARIABLE, get that value:
                if varname == "THISVARIABLE":
                        mypythonvariable == value

次のエラーが表示されます。

NameError: 名前 'Somevariableinmytextfile' が定義されていません

Somevariableinmytextfile は、そのファイルの最初の変数です。

私の質問:

このエラーを取り除くために、txt ファイル内のすべての変数を定義する必要がありますか? そうでない場合は、どうすればよいですか?私はPythonが初めてです。これは私の最初のプログラムです。

4

3 に答える 3

1

エラーは、の内容が何であれ意味がないことevalを訴えています。value_string

本当のエラーはevalまったく使用しています。(落とし穴についての良い記事はここにあります。)ここに書く必要さえありませんeval-value_string正規表現があなたに与えた文字列のままで十分です

現在のアプローチの問題点

サンプルthefile.txt:

foo=bar
baz=42
quux=import os; os.shutdown()
  • を解析するとき、Python はそれが定義されていないとfoo文句を言います。bar(単純。)
  • を解析するbarと、Python は のint代わりに を返しますstr。(特に問題はありません...)
  • を解析するときquux、Python はコンピュータをシャットダウンします。(うおおおお! )

必要ない理由eval

文字列値が必要ですよね?正規表現はすでに文字列を提供しています!

varname = m.group("varname")
value = m.group("value")
print value
if varname == "THISVARIABLE":
    mypythonvariable = value # You meant = instead of ==?
于 2013-07-22T03:04:10.607 に答える
0

thefile.txt ファイル内の次の行により、エラーが発生します。

テスト = ABC

TEST は変数 ABC の値に割り当てられるため、Python で評価されますが、ABC が定義されていません。

値のペアを格納するための辞書を作成できます...これは文字列値で機能します:

variables = {}
accepted = ['THISVARIABLE', 'ANOTHERONE']
...
if varname in accepted:
    variables[varname]=value
于 2013-07-21T22:00:47.473 に答える
0

evalはエラーをスローしますvalue_string。使用前に の値 (変数である必要があります) を定義する必要があります。

于 2013-07-21T22:08:54.277 に答える