Перебор списка кортежей или имен из текстового файла

Фрагмент Python, который вставляет текст spamв последнюю позицию во втором -–-последнем %post..%endблоке:

with open('input') as fp:
    lines = fp.readlines()

locs = [i for i, val in enumerate(lines) if val == '%end\n']
lines.insert(locs[-2], 'spam' + '\n')

with open('input', 'w') as fp:
    fp.write(''.join(lines))
0
16.04.2020, 01:50
1 ответ

Учитывая два слова, разделенных пробелом или табуляцией, в каждой строке файла, как во втором примере входного файла:

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

Это считывало бы первое слово в каждой строке в $word1, а остальную часть строки в $word2.

Ввод для readзадается вводом составной команды while, которая получает его из файла через перенаправление.

Опция -rдля readзапрещает интерпретировать \каким-либо особым образом, если этот символ встречается во входных данных.

С одним словом в строке и счетчиком:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

Это будет увеличивать счетчик на единицу в каждой итерации (для каждой строки, считанной изtextfile.txt).

Чтобы получить нулевой -трехзначный -счетчик, выведите счетчик, используя printfсо строкой форматирования%.3d\n:

printf '%.3d\n' "$counter"

... вместо echo "$counter".

Описание того, что означает %.3d\n, см. в документации к библиотечной функции C printf(man 3 printf, эквивалент оболочки использует в основном ту же строку формата ).

3
19.03.2021, 02:28

Теги

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