Как удалить строчку в файле python
Перейти к содержимому

Как удалить строчку в файле python

  • автор:

Удалить строку из txt файла если не нашлось совпадения

Есть много_txt_файлов и еще один с данными. Нужно удалить из файла с данными строку если в много_txt_файлов не нашлось совпадения.

в файле с данными 4000 строк, одно значение в строке, много_txt_файлов 1900 штук, три значения в строке

хочется более менее простого решения, в чем смогу сам разобраться если вдруг понадобится внести изменения

знаю что бесплатно никто не работает) оставите координаты отправлю немного на чтосамирешите)

xohox
02.10.21 18:05:58 MSK

Зачем тебе grep и прочие Shell-костыли для этого? Возьми какой-нибудь нормальный ЯП, например, Python и сделай всё с его помощью.

EXL ★★★★★
( 02.10.21 18:08:28 MSK )

Нужно удалить из файла с данными строку если в много_txt_файлов не нашлось совпадения.

Может наоборот? Добавлять в новый файл строку если grep пустой?

anonymous
( 02.10.21 18:13:24 MSK )

Цикл, awk и [ в помощь.

anonymous
( 02.10.21 18:17:09 MSK )

#!/usr/bin/bash data_file="$1" many_files_dir="$2" tmp_file=$(mktemp) cat "$data_file" | while read line; do if grep -Fqr "$line" "$many_files_dir"; then echo "$line" >> "$tmp_file" fi done mv "$tmp_file" "$data_file" 

Я не проверял, конечно. И это, по идее, должно работать, только если строки идеально совпадают. Если надо прям значения сравнивать, без учёта пробелов, то такой вариант не подойдёт.

anonymous
( 02.10.21 18:25:02 MSK )
Ответ на: комментарий от anonymous 02.10.21 18:25:02 MSK

Может быть ещё -x стоит добавить к аргументам grep.

anonymous
( 02.10.21 18:30:46 MSK )

Можно решать задачу по другому.

Читаешь файл построчно и ищешь совпадения в файлах, если нашлось заносить строку в другой новый файл ( в один и тот же).

В конце получаешь новый файл в котором только строки что нашлись.

anonymous
( 02.10.21 20:48:39 MSK )

… знаю что бесплатно никто не работает)

Почему же?
Многим помогают, кто приводит код и говорит о проблемах.
А те кто просто просят СДЕЛАЙТЕ МНЕ, тех в job /жопу по просто народному/ отсылают …

anonymous
( 02.10.21 20:57:08 MSK )
Ответ на: комментарий от anonymous 02.10.21 18:25:02 MSK

Что-то не взлетает, записывает в новый файл значения из data_file, на этом всё. Строки конечно же не совпадают.

строки в файлах в many_files_dir

76.9.16.1:3510 47.16.38.12:55194 ESTABLISHED 76.9.16.1:35356 19.197.55.71:51152 SYN_SENT

строки в data_file

по моей задумке в новый файл должен попасть только 47.16.38.12

сможешь что-то с этим сделать?

xohox
( 02.10.21 20:59:17 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 20:57:08 MSK

Можно в job попросить модератора перенести, но я ж вроде написал, что готов материально отблагодарить.

Могу и сам сидеть ковыряться, но, как всегда, нужно сейчас. Поэтому и обратился.

xohox
( 02.10.21 21:02:09 MSK ) автор топика
Ответ на: комментарий от xohox 02.10.21 21:02:09 MSK

Могу и сам сидеть ковыряться, но, как всегда, нужно сейчас.

Вы анализируете лог файл.
Что вы хотите найти в нем?

anonymous
( 02.10.21 21:04:23 MSK )

touch result.txt for w in `cat data.txt` do if [ -z `grep -r $w ./filesdir/` ] then echo $w >> results.txt fi done mv results.txt data.txt 

AKonia ★★
( 02.10.21 21:08:46 MSK )
Ответ на: комментарий от xohox 02.10.21 20:59:17 MSK

Ну, по логике всё должно быть как ты хочешь. Может быть у тебя файл с данными в той же папке лежит, что и txt-файлы?

anonymous
( 02.10.21 21:22:49 MSK )
Ответ на: комментарий от xohox 02.10.21 20:59:17 MSK

Проверил на вот этих твоих данных сейчас. Структура файлов такая:

./script.sh ./data.txt ./txt/f.txt 
$ cat data.txt 47.16.38.12 1.1.9.5 $ cat txt/f.txt 76.9.16.1:3510 47.16.38.12:55194 ESTABLISHED 76.9.16.1:35356 19.197.55.71:51152 SYN_SENT 
$ ./script.sh data.txt txt $ cat data.txt 47.16.38.12 

То есть пропала запись 1.1.9.5 . Так ведь надо было?

anonymous
( 02.10.21 21:32:28 MSK )

grep -v 'pattern' file > newfile 

anonymous
( 02.10.21 21:49:47 MSK )
Ответ на: комментарий от AKonia 02.10.21 21:08:46 MSK

Хочу оставить в data файле только ip с которых подключаются и удалить те, с которых подключения прекратились.

Ругается вот так

./start ./start: line 6: [: too many arguments ./start: line 6: [: too many arguments ./start: line 6: [: too many arguments

шестая строка if [ -z grep -r $w /root/test/ ]

выдает три строки с ошибками, но в data файле четыре строки

cat data 185.155.99.55 37.70.201.228 94.130.57.235 1.1.9.5

xohox
( 02.10.21 22:08:00 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 21:32:28 MSK

мой косяк, все работает)

xohox
( 02.10.21 22:13:23 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 21:32:28 MSK

напиши, пожалуйста, куда удобно будет отправить оплату

xohox
( 02.10.21 22:14:24 MSK ) автор топика
Ответ на: комментарий от xohox 02.10.21 22:14:24 MSK

Да ничего не надо. Купи жене или маме цветы 🙂

anonymous
( 02.10.21 23:11:45 MSK )
Ответ на: комментарий от anonymous 02.10.21 23:11:45 MSK

может на телефон отправить? напиши номер в личку, а то ты время тратишь, а пользуюсь я, неправильно это

результат теста, мало ли интересно, из 4000 строк осталось 130) огонь)

xohox
( 03.10.21 00:38:59 MSK ) автор топика
Ответ на: комментарий от xohox 03.10.21 00:38:59 MSK

Для меня это было несложно. Потратил я минут 5 на то, что мне в было интересно, что в этом неправильного? Но спасибо, что проявляешь ответственность 🙂

Тот твой огонь из моего окна не видно, к сожалению. А не думал завести БД под свои файлы? Возможно с языком запросов все твои задачи решались бы проще. Или, как тут правильно советуют, попробуй анализатор логов какой-нибудь, там уже должны быть решены все типовые задачи. Какой именно — я тебе не смогу посоветовать, так как сам ими не пользуюсь.

anonymous
( 03.10.21 01:17:10 MSK )
Ответ на: комментарий от anonymous 03.10.21 01:17:10 MSK

Тут какая штука, этот data файл собирался более года. Теперь я его почищу и это снова на год хватит. Анализатор/парсер у меня есть, это perl скрипт, 100 000 строк за одну секунду обрабатывает. Я вот только не знал как убрать уже не используемые.

В БД мне кажется пока нет смысла, но посмотрю конечно, может действительно стоит выкинуть мои костыли и использовать готовое решение.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Удалить строку из файла

#1 Ноя. 21, 2013 13:42:03

SmalllSMK Зарегистрирован: 2013-11-21 Сообщения: 2 Репутация: 0 Профиль Отправить e-mail

Удалить строку из файла

Доброе время суток.

Скажите как выполнить удаление строк из файла?
Я только постигаю азы. Это первая программа, особо не пинайте короч…
Надо, что бы перед циклом сработало удаление первой, второй и последней строк.

goods = open('goods.txt') report = open('report.txt') total = open('total.txt', 'a') counter = 0 for every_symbol in goods: every_symbol = every_symbol.split("|") data = [every_symbol[0].strip(), every_symbol[1].strip(), every_symbol[2].strip(), every_symbol[3].strip()] total.write(str(data) + "\n") 

Как через python удалить строку в файле?

Весь интернет облазил, — везде только с замены на пробелы и подобное. Ни где не могу найти функцию, которая могла бы удалить строку в файле без оставления переноса.

  • Вопрос задан более трёх лет назад
  • 42542 просмотра

Комментировать

Решения вопроса 2

Системный администратор

Ответ написан более трёх лет назад

Нравится 3 1 комментарий

Николай Сидоренко @NSidorov Автор вопроса

То, что нужно спасибо!

Avernial

Разрабатываю научное ПО на языке Python.

Можно попробовать использовать: subprocess.call(«sed -i ‘pattern’ file_name», shell=True).
Например для удаление из файла, содержащего числа в каждой строке, чтобы удалить строку с номер два, можно выполнить команду: subprocess.call(«sed -i ‘/2/d’ numbers.txt», shell=True).

Ответ написан более трёх лет назад

Нравится 1 2 комментария

Как удалить пустые строки из файла python

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

cat file.txt # foobar # # fizzbazz # helloworld! # # python # # hexlet # with open('file.txt') as f: lines = f.readlines() non_empty_lines = (line for line in lines if not line.isspace()) with open('new_file.txt', 'w') as n_f: n_f.writelines(non_empty_lines) cat new_file.txt # foobar # fizzbazz # helloworld! # python # hexlet 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *