Как сопоставить первое слово строки и разделить последующие значения запятой - PullRequest
0 голосов
/ 23 марта 2020

У меня возникла проблема: у меня более ста различных файлов уценки, и мне нужно обновить одну строку frontmatter в них. В строке tags: мне нужно заключить значения в скобки и разделить их запятой. Существуют сотни различных значений, поэтому здесь нет никакого паттерна.

Вот пример:

---
layout: post
title: "Blog title"
date: 2016-02-24 09:39:00 -0500
tags: work career code programming
layout: post
---

И это должно выглядеть примерно так:

---
layout: post
title: "Blog title"
date: 2016-02-24 09:39:00 -0500
tags: ["work", "career", "code", "programming"]
layout: post
---

Я не уверен, что лучший способ сделать это. Я смог настроить таргетинг на первое значение только с помощью регулярных выражений, например, (?<=tags: ).

Я не могу понять, как получить остаток строки и что с этим делать.

1 Ответ

1 голос
/ 23 марта 2020

Предполагая, что строка всегда начинается с tags:, вы можете сделать следующее:

with open('data.md') as fin:  # change to your file path
    with open('result.md', 'w') as fou:
        for line in fin:
            if line.startswith('tags:'):
                tags = line.split(':')[1].split()
                line = f'tags: {tags}\n'
            fou.write(line)

Выход (result.md)

---
layout: post
title: "Blog title"
date: 2016-02-24 09:39:00 -0500
tags: ['work', 'career', 'code', 'programming']
layout: post
---

Идея состоит в том, чтобы преобразовать строку в список, используя split , и записать ее обратно, используя представление строки списка.

Если вам нужно, чтобы строки были заключены в двойные кавычки Вы можете использовать json .dumps , например:

import json

with open('data.md') as fin:  # change to your file path
    with open('result.md', 'w') as fou:
        for line in fin:
            if line.startswith('tags:'):
                tags = json.dumps(line.split(':')[1].split())
                line = f'tags: {tags}\n'
            fou.write(line)

Выход (с двойными кавычками)

---
layout: post
title: "Blog title"
date: 2016-02-24 09:39:00 -0500
tags: ["work", "career", "code", "programming"]
layout: post
---
...