Невозможно ввести пароли в терминале [дубликат]

Я не видел решение python, так вот:

import sys
import os
def open_and_replace(filename):

    with open(filename) as read_file:
        temp = open("/tmp/temp.txt","w")
        for index,line in enumerate(read_file,1):
            if  index == 5:
                temp.write("NEW STRING\n")
            else:
                temp.write(line.strip() + "\n")
        temp.close()
    os.rename("/tmp/temp.txt",filename)

for file_name in sys.argv[1:]:
    open_and_replace(file_name)

Основная идея заключается в том, что для каждого файла, предоставленного в командной строке в качестве аргумента, мы выписываем временный файл и перечисляем каждую строку в исходном файле. Если индекс строки равен 5, мы выписываем строку, которая отличается. Остальное просто заменяет старый файл временным файлом. Demo:

$> ls
file1.txt  file2.txt  file3.txt
$> cat file1.txt                                                               
line 1
line 2
line 3
line 4
GOOD MORNING
line 6
$> python ~/replace_5th_line.py file1.txt file2.txt  file3.txt                 
$> cat file1.txt                                                               
line 1
line 2
line 3
line 4
NEW STRING
line 6
$> cat file2.txt                                                               
line 1
line 2
line 3
line 4
NEW STRING
line 6

То же самое может быть достигнуто при понимании списка. Ниже приведен однострочный шрифт одного и того же сценария:

cat /etc/passwd | python -c 'import sys; print "\n".join(["CUSTOM"  if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])'

или без cat

python -c 'import sys; print "\n".join(["CUSTOM"  if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])' < /etc/passwd

. Осталось просто перенаправить вывод отредактированного содержимого в другой файл с > output.txt

1
задан 20 September 2016 в 04:53

0 ответов

Другие вопросы по тегам:

Похожие вопросы: