How to delete a specific line in a text file using Python?
Как удалить определенную строку в текстовом файле с помощью Python?
Допустим, у меня есть текстовый файл, полный псевдонимов. Как я могу удалить определенный псевдоним из этого файла, используя Python?
Переведено автоматически
Ответ 1
Сначала откройте файл и извлеките все свои строки из файла. Затем снова откройте файл в режиме записи и запишите свои строки обратно, за исключением строки, которую вы хотите удалить:
withopen("yourfile.txt", "r") as f: lines = f.readlines() withopen("yourfile.txt", "w") as f: for line in lines: if line.strip("\n") != "nickname_to_delete": f.write(line)
Вам нужно strip("\n") указать символ новой строки в сравнении, потому что, если ваш файл не заканчивается символом новой строки, самый последний символ также не будет. line
Ответ 2
Решение этой проблемы с помощью всего одного открытого:
withopen("target.txt", "r+") as f: d = f.readlines() f.seek(0) for i in d: if i != "line you want to remove...": f.write(i) f.truncate()
Это решение открывает файл в режиме r / w ("r +") и использует seek для сброса f-указателя, а затем усекает, чтобы удалить все после последней записи.
Ответ 3
На мой взгляд, лучший и быстрый вариант, вместо сохранения всего в списке и повторного открытия файла для его записи, - это перезаписать файл в другом месте.
withopen("yourfile.txt", "r") as file_input: withopen("newfile.txt", "w") as output: for line in file_input: if line.strip("\n") != "nickname_to_delete": output.write(line)
Вот и все! В одном цикле и только в одном вы можете сделать то же самое. Это будет намного быстрее.
Ответ 4
Это "форк" из ответа @Lother (следует считать правильным ответом).
Для файла, подобного этому:
$ cat file.txt 1: october rust 2: november rain 3: december snow
Этот код:
#!/usr/bin/python3.4
withopen("file.txt","r+") as f: new_f = f.readlines() f.seek(0) for line in new_f: if"snow"notin line: f.write(line) f.truncate()
Улучшения:
with open, который исключает использование f.close()
более понятно, if/else как определить, отсутствует ли строка в текущей строке