2017-08-15 19 views
0

編集機能が必要ですが、入力された行を置き換えるのではなく、特定のテキストファイルに書き込むためのID番号(行番号と同じ)を入力するコードがあります。ファイル全体を消去し、編集したエントリのみを保存します。ファイル内のすべてのデータを削除するのではなく、入力した行だけを変更するようにコードを変更するにはどうすればよいでしょうか。テキストファイルの1行を編集する

import time 
global idnum 

def number(): 
    global idnum 
    print() 
    idnum = int(input("Enter the id number of who you want to edit: ")) 

def edit(): 
    number() 
    num_lines = sum(1 for line in open('Surname')) 
    print() 
    if idnum> num_lines or idnum ==0 or idnum < 0: 
     print("Not valid") 
     time.sleep(0.5) 
     print("Try again") 
     print() 
     time.sleep(0.2) 
     again() 
    else: 
     print() 
     for file in ["Gender"]: 
      with open(file) as f: 
       print(f.readlines()[idnum-1], end='') 

def editgender(): 
    with open("Gender",'r') as f: 
     get_all=f.readlines() 
    with open("Gender",'w') as f: 
     for i,line in enumerate(get_all,1):   ## STARTS THE NUMBERING FROM 1 (by default it begins with 0)  
      if i == idnum:    
       Gender = input("Enter new gender: ") 
       f.writelines(Gender + "\n") 
       print("Edit saved") 
       print() 
+0

ちょうど私が読んでいるので、あなたの質問に '(...、start = 1)'と書くと列挙型行に大量のコメントを入れて '(...、1)オープン](https://docs.python.org/3/library/functions.html#open)esp。 '+'は長い道のりになるはずのモード... – Dilettant

答えて

1

あなたのコードは、(障害が発生した時点で)このように見えるように編集する必要があります。

if i == idnum:    
    Gender = input("Enter new gender: ") 
    get_all=f.readlines() 
    get_all[i-1]=Gender+"\n" 
    f.write(''.join(get_all)) 
    print("Edit saved") 
    print() 

は、この情報がお役に立てば幸い! :)

1

「w」モードではなく「a」でファイルを開こうとします。

最も一般的なモードの値は、読み込みの場合は「r」、書き込みの場合は「w」、ファイルがすでに存在する場合はファイルの切り詰め、追加の場合は「a」です(いくつかのUnixシステム現在のシーク位置にかかわらず、すべての書き込みがファイルの末尾に追加されることを意味します)。

+0

ファイルの途中で何かを置きたいのであればどうしますか?あなたは – user8435959

+0

@ user8435959を追加することはできません。その場合は、私のコメントのリンクに従ってください;-)ヒント '+' ...読み込みと書き込みのために開かれます...完全なファイルを常に上書きしたくない場合は、しかし、その一部だけ... – Dilettant

関連する問題