Итерация по файлу

#python #file #text #split #iterator

#python #файл #текст #разделение #итератор

Вопрос:

Я хочу открыть файл на Python. Для каждой строки в файле разделите ее на line.split(" ") ,
чтобы получить доступ к первому слову.

Затем проверьте, равно ли слово заданной строке «TEST». Если это так, удалите строку, просто сохраните ее.

Я пытался использовать readlines() для чтения строк. Это сработало, но потом я не мог понять, как удалить всю строку.

Пока это мой код

 def delete_client(client):
    f = open("clients.md", "r")
    data = f.readlines()

    f = open("clients.md", "w")
    for line_counter in range(len(data)):
        splitted_line = data[line_counter].strip("n").split()[0]
        print("n"   splitted_line)

        if client == splitted_line:
            print("Equal to client")
            f.write("HELLO")
        else:
            print("Not equal to client")

    f.close

delete_client("DELETE_ME")
 

Клиентский файл

 first 192.168.0.14 Lukas administrator
another text 192.168.0.14 Lukas administrator
DELETE_ME 192.168.0.14 Lukas administrator
fourth 192.168.0.14 Lukas administrator
 

Ответ №1:

else: Блок должен записать строку в файл. И избавьтесь от строки, которая записывает HELLO в файл (если вы действительно не хотите, чтобы это заменило удаленные строки).

         if client == splitted_line:
            print("Equal to client")
        else:
            print("Not equal to client")
            f.write(data[line_counter])
 

Ответ №2:

Используйте понимание списка, чтобы создать другой список, который не содержит строк, которые вы хотите удалить, и записать эти строки обратно в исходный файл.

 def delete_client(client):
  with open('clients.md', 'r') as f:
    data = f.readlines()

  lines_to_keep  = [line for line in data if line.split(' ')[0] != client]
  
  with open('clients.md', 'w')as f:
    f.writelines(lines_to_keep)
    
delete_client("DELETE_ME")
 

Ответ №3:

Вы не можете имитировать желаемое поведение с помощью:

 import fileinput

for line in fileinput.input(files=('clients.md'), inplace=True, backup='.old'):
    if not line.startswith('DELETE_ME'):
        print(line, end='')
 

В качестве альтернативы работает и «простой старый» способ;

 with open('clients.md', 'r') as in_file:
    content = in_file.readlines()
    
with open('clients.md', 'w') as out_file:
    out_file.writelines(filter(lambda x: not x.startswith('DELETE_ME'), content))
 

Также при чтении / записи файлов вы должны использовать with -blocks, чтобы гарантировать, что указатели файлов открываются / закрываются правильно.

Ответ №4:

Вы можете использовать:

 def dc(word):
  with open("text.txt") as f:
    i =  [l for l in f if not l.startswith(word)]
  with open("text.txt", "w") as w:
    print(*i)
    for l in i:
      w.write(l)
  
word = "DELETE_ME"
dc(word)
 

ДЕМОНСТРАЦИЯ