Как я могу получить `sed`-подобное поведение изнутри Python при запуске Windows? - PullRequest
0 голосов
/ 07 ноября 2019

Начало решения показано ниже.

import subprocess
import os
import sys

def sed(stryng, istream=None, ostream=None):
    if sys.platform == "linux":
        subprocess.run(["sed", stryng])        
        subprocess.call(['sed', 's/\"//g', inp], stdout=out_file)
    elif os.name == 'nt':
        # if running Windows
        lead_up = "@ powershell - Command get-content somefile.txt | %{{$_ -replace "
        expression = ""
        replacement = ""
        subprocess.run(lead_up + f"\"\"{expression}\",\"{replacement}\"}}")
    else:
        raise NotImplementedError()

Использование:

in_file  = open("report_new.txt", "r")
out_file = open("report_new.txt", "w")
sed("'s/Nick/John/g'", in_file, out_file)
out_file.close()
in_file.close()

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы все равно используете Python, вы также можете напрямую манипулировать файлом. (см. также https://askubuntu.com/a/747455) Псевдокод:

subject, replacement = split pattern at /
s = read in_file
in s replace each subject with replacement
write s to out_file

Я не знаком с деталями того, как sed интерпретирует шаблоны; там может быть некоторое неожиданное поведение из-за перехода с диалекта Regex на sedк Python. Тем не менее, основные функции должны работать примерно так же. Однако я думаю, что вы уже отказались от совершенно согласованного поведения, потому что вы предполагаете, что эквивалент Powershell будет работать идентично sed.

Если вы хотитеФактически sed чтобы выполнить замену, я хотел бы изучить использование подсистемы Windows Linux. Очевидно, для этого требуется, чтобы у пользователя был установлен WLS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...