2017-11-23 11 views
0

私はファイルの場所を持つ設定ファイルを持っていますが、私がしたいのはユーザー入力を集め、その入力がファイル内にある場合です。 これをファイルから削除します。 これはこれまで私が持っているものです...ユーザー入力に基づいてファイルからエントリを削除します。

parser = argparse.ArgumentParser() 
parser.add_argument('-r', action='store_true') 
args = parser.parse_args() 

if args.r: 
     f = open('config.dat', 'r') 
     remove_contents = f.read() 
     #How to read input from user input and remove line from config.dat 
     f.close() 

何か助けていただければ幸いです。 ありがとう

+0

あなたのユーザー入力は何ですか、あなたは何を削除しますか?これまでのデータベースとjsonファイルについて読んだことはありますか? – user1767754

+0

ユーザーは./script.py -r file1.txtを実行します。このファイルがconfigにある場合、これは他の賢明な「ファイルはありません」を削除して終了します。ありがとう –

+0

エントリを削除するか、そのエントリに基づいてファイルを削除しようとしていますか? – user1767754

答えて

0

テキストファイルは、現在行っているようにデータを管理するための最良の方法ではありません。あなたは基本的にメモリ内のすべてを読んでから書き直す必要があります。ここに1つの解決策があります。次のようにCONFIG.DATファイルの

#Read Content 
f = open("config.dat","r") 
lines = f.readlines() 
f.close() 

#Write it back, but skip the line which should be deleted 
f = open("config.dat","w") 
for line in lines: 
    print line 
    if line!="ruhuru"+"\n": #Replace this string with your arg var 
     f.write(line) 
f.close() 

内容は次のとおりです。あなたが唯一の読書のためのファイルを開いているすべての

blabla 
ruhuru 
gugug 
kukuku 
0

まず。ファイル内の何かを変更したい場合は、引数を 'r +'にして開きます。このように:

f = open('config.dat', 'r+') 

その後、設定ファイルを行に分割する必要があります。

remove_contents = remove_contents.split('\n') 

コンテンツの入力に「args」と入力されているかどうかを確認する場合は、このようにloopeを使用できます。

for line in remove_contents: 
    if line != args: 
     f.write(line + '\n') 

最初の行:行に分割されたremove_contentsのすべての行を読み込みます。 2行目:行に 'args'が含まれていないかどうかを確認します。 3行目:条件が満たされていればラインを書きます。

+0

コンテキストマネージャを使用せずにWindowsシステム上にいる場合、 'f.close()'を実行しないとファイルをロックする可能性があります – user1767754

+0

this: script.py -r newtest.txt次に、認識できない引数を取得する:test.dat 使用法:script.py [-h] [-c C] [-l] [-r] [-a] addtofile .py:エラー:認識できない引数:test.dat –

関連する問題