2016-10-07 5 views
0

私は1つの.txtファイルを持っています。sys.argvまたは​​または他のパッケージでPythonスクリプトを作成してtxtファイルにいくつかの変数を定義します。Pythonスクリプトを使用してtxtファイルの変数を定義します

私は多分このようなPythonスクリプト

txtファイルに渡された引数に基づいて、テキストファイル内の変数を更新する:

input number 1= %var1% 
input number 2= %var2% 
result = %vresult(var1-var2)% 

必見のVAR1、VAR2いくつか入力して、ユーザーが定義しますPythonスクリプトでは、私は結果(var1-var2 ex)を取る

私はこれを簡単に行うことができますが、私はPythonスクリプトからtxtに引数を接続する方法を知らない。

どのように私はtxtファイルの動的変数を更新するためのpythonスクリプトを書くことができますか?

私は何かを置き換えることを望んでいないので、引数が優れています。

+0

変数をtxtファイルからPythonスクリプトで読み込みますか?または、Pythonスクリプトに渡された引数に基づいてテキストファイルの変数を更新しますか?私はあなたに追いつこうとしていますが、それを得ていません。 – intrepidhero

+0

Pythonスクリプトに渡された引数に基づいてテキストファイルの変数を更新したい –

答えて

0

これを実行する方法はほとんど間違いありませんが、面白い問題のように聞こえましたので、試してみることにしました。あなたができる、タイプで1行を読んで、「VAR =値」の入力フォーマットに準拠することで

x = 1 
y = 2 
z = 3 

NEWFILE.TXT:私は、次のような記載されている変数名を持つテキストファイルを定義し正しい変数のテキストファイルを解析し、新しい値でファイルを書き換えます。

import fnmatch 


var2change = "z = 17" 
identifier = var2change.split('=')[0] # Get variable name 

# Read file 
file = open('newfile.txt', 'r') 
fileLines = file.read() 
fileLines = fileLines.splitlines() 

for lineNum,var in enumerate(fileLines): 
    if fnmatch.fnmatch(str(var),''.join([identifier,'*'])): break # Found variable to change 

file.close() 

file = open("newfile.txt", "w") 
for ln, data in enumerate(fileLines): 
    if ln == lineNum: 
     lineToWrite = ''.join([var2change, '\n']) 
    else: 
     lineToWrite = ''.join([data, '\n']) 

    file.write(lineToWrite) 

file.close() 

これは読むためにファイルを再書き込みます:

NEWFILE.TXT:

x = 1 
y = 2 
z = 17 
1

これはregexと辞書を、使用してsys.argvを使用して入力を取って別の方法であります:

import sys,re 
v1 = sys.argv[1] 
v2 = sys.argv[2] 

with open('file.txt','r') as f: 
    content = f.read() 

repl = {'var1':v1, 'var2':v2} 

repl_pattern = re.compile(r'(' + '|'.join(repl.keys()) + r')') 
final_data = repl_pattern.sub(lambda x: repl[x.group()], content) 

with open('file.txt','w') as new: 
    new.write(final_data) 

結果:

input number 1= 3 
input number 2= 2 
result = vresult(3-2) 
:ファイルへの変更:

input number 1= var1 
input number 2= var2 
result = vresult(var1-var2) 

と、上記のコードを実行した後(sys.argv[1]=2sys.argv[2] = 3:)

はfile.txtなどは、最初に、以下のコンテンツを有していました

result = vresult(3-2)の代わりにresult = 1が必要な場合は、次のコードを追加してください。

result = str(int(v1)-int(v2)) 
key3 = 'vresult('+v1+'-'+v2+')' 
final_data = final_data.replace(key3,result) 

の直前with open('file.txt','w') as new: ....

+0

私はあなたのコードに従いますが、2行目のv1 = sys.argv [1]で 'IndexError:list index of range'私はv1 = sys.argvに変更します。[1] = 2もう一度そのエラーを表示してください、なぜですか?私はユーザPython 2.7です。 –

+0

@ChrisPapas内部で 'sys.argv'に値を与える必要はありません。あなたはスクリプトに名前をつけますtest.py、 'python test.py 3 2'のように実行し、ファイル名をfile.txtから使用しているファイル名に変更してください。私はまた、Python 2.7を使用して、私は問題がなかった... – coder

+0

cmdの行はい、しかし、進捗状況は私が望むので、スクリプトのcmd行で実行する必要があります。 –

関連する問題