2017-06-07 14 views
0

ファイル内に各行を書くことはできません。そのような長い文字列のように: "a、1; b、2; c、3"たとえば "b、2"を削除するメソッドを記述したいと思います。また、私はラインでそれを書き込むことはできません、なぜ私は少し混乱し、固執...すべてのヘルパーのためのThnks。ファイルのpythonで特定のデータを消去する方法

class Data: 

def __init__(self): 

    print "are you ready?? :)" 

def add_data(self, user_name, password): 

    add = open("user_data.txt", "a") 
    add.write(user_name + "," + password + ";") 
    add.close() 

def show_file(self): 

    file = open("user_data.txt", "r") 
    print file.read() 
    file.close() 

def erase_all(self): 

    file = open("user_data.txt", "w") 
    file.write("") 
    file.close() 

def return_names(self): 

    file = open("user_data.txt", "r") 
    users_data = file.read() 
    users_data = users_data.split(";") 
    names = [] 

    for data in users_data: 

     data = data.split(",") 
     names.append(data[0]) 

    file.close() 
    return names 

def is_signed(self, user_name): 

    names = self.return_names() 

    for name in names: 

     if user_name == name: 

      return True 

    return False 

def is_password(self, user_name, password): 

    file = open("user_data.txt", "r") 
    users_data = file.read() 
    users_data = users_data.split(";") 

    for data in users_data: 

     data = data.split(",") 

     if data[0] == user_name: 

      if data[1] == password: 

       return True 

    file.close() 

    return False 

def erase_user(self, user_name): 

    pass 
+0

'' \ n ''を '' add.write(... ')の最後に追加してNewLineを開始してください。 – stovfl

答えて

1

コメントに記載されているように、ファイルに行を書き込むたびに改行を挿入すると便利です。 ファイルの操作を簡単にするために、ファイルにアクセスするたびにwith open()を使用することを検討してください。

ので、完全に、ファーストクラスのメソッドの例:

def add_data(self, user_name, password): 
     with open('user_data.txt', 'a') as add: 
      add.write(user_name + ',' + password + ';') 
      add.write('\n') # <-- this is the important new line to include 

    def show_file(self): 
     with open('user_data.txt') as show: 
      print show.readlines() 

...と他の方法についても同様。ファイルからユーザのエントリを削除する方法として

# taken from https://stackoverflow.com/a/4710090/1248974 
def erase_user(self, un, pw): 
    with open('user_data.txt', 'r') as f: 
     lines = f.readlines() 

    with open('user_data.txt', 'w') as f: 
     for line in lines: 
      user_name, password = line.split(',')[0], line.split(',')[1].strip('\n').strip(';') 
      if un != user_name and pw != password: 
       f.write(','.join([user_name, password])) 
       f.write(';\n') 

試験:

d = Data() 
d.erase_all() 
d.add_data('a','1') 
d.add_data('b','2') 
d.add_data('c','3') 
d.show_file() 
d.erase_user('b','2') 
print 'erasing a user...' 
d.show_file() 

出力:

are you ready?? :) 
['a,1;\n', 'b,2;\n', 'c,3;\n'] 
erasing a user... 
['a,1;\n', 'c,3;\n'] 

確認ラインエントリがテキストファイルから除去しました。

a,1; 
c,3; 

これが役に立ちます。

+0

ありがとうございました! – shahar

関連する問題