Как удалить все строки, содержащие начальные // или / - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть файл trial.txt, содержащий

This can stay
// but this 
/ and this
// must go
I will be happy

Для удаления ведущих # я использовал в других случаях

os.system(" sed '/^#.*/d' trial.txt > start.txt ")

чтобы удалить // я использовал

os.system(" sed '/^//.*/d' trial.txt > start.txt ")

но это дает ошибку

sed: 1: "/^//.*/d": invalid command code /

Есть предложения? с предпочтительно Python или с Linux?

1 Ответ

0 голосов
/ 29 апреля 2018

Конечно, вы должны избегать косой черты, не избегать косой черты с помощью ... другой косой черты (и использовать префикс необработанной строки)

os.system("sed r'/^\/.*/d' trial.txt > start.txt")

Но это не очень питонно по многим причинам:

  • os.system устарела в пользу subprocess
  • ваша командная строка зависит от оболочки, поэтому уязвима для атак, если некоторые поля становятся переменными
  • использование sed, когда Python может сделать это изначально, является излишним (также не переносимым, например, в Windows, где sed должен быть установлен отдельно, и одинарные кавычки также не будут работать там) ...

Кроме того, это не отфильтровывает одиночную линию.

Я бы пошел с тестированием / в начале каждой строки и использовал бы writelines с пониманием генератора:

with open("trial.txt") as fr, open("start.txt","w") as fw:
    fw.writelines(line for line in fr if not line.startswith("/"))
...