#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)