Написание текста между строками в одну строку - PullRequest
0 голосов
/ 18 декабря 2018
def getlink():
    with open('findlink.txt') as infile, open('extractlink.txt', 'w') as outfile:
        copy = False
        for line in infile:
            if "](" in line.strip():
                copy = True
            if copy:
                outfile.write(line)
            if ")" in line.strip():
                copy = False
        print("extractlink written.")


def part3():
    with open ('findlink.txt', 'w') as findlink:
        findlink.write("[Testing](Test)") 
        print("findlink written and closed.")
        getlink()

def run_bot():
    getlink() #Already have findlink.txt written

Когда активирован part3(), текст записывается в findlink.txt, как и ожидалось, но когда активирован getlink(), extractlink.txt никогда не записывается в.

У меня естьсобрал мой текущий код из поста в 2013/2016, есть ли у кого-нибудь идеи, почему это может не сработать?

Текущая цель - скопировать «Test» из findlink в extractlink.txt, а не ввся линия

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Согласно этому [учебному пособию] [1] https://www.tutorialspoint.com/python/string_strip.htm

line.strip("text") удаляет text из строки.

Так, когда вы вызываете line.strip () == "] ("вы сравниваете line.strip (" ") с"] (", что всегда ложно, если только строка ввода не была просто"] (". Так что это условие на самом деле ничего не делает.

Чтобы получитьТест из файла, я использовал line.find (), который дает индекс символа в строке.

print line.find("](")
print line.find(")")
print line[line.find("](")+2: line.find(")")]

output:

8
14
Test

Так что тогда вы можете просто сделатьэто для getlink ().

def getlink():
    with open('findlink.txt') as infile, open('extractlink.txt', 'w') as outfile:
        for line in infile:
            outfile.write(line[line.find("](")+2: line.find(")")])
            print("extractlink written.")
        infile.close()
        outfile.close()

extractlink.txt:

Test

Это всего лишь одно простое решение. Вы можете реализовать его по-другому, но вы можете использовать line.find() вместо line.strip ().

0 голосов
/ 18 декабря 2018

Простой парсер:

def getlink():
    with open('findlink.txt') as infile, open('extractlink.txt', 'w') as outfile:
        for line in infile:
            begin = line.find("](")+2
            end = line.find(")")
            if 0 <= begin < end:
                   outfile.write(line[begin:end]+'\n')
0 голосов
/ 18 декабря 2018

Кто-то отредактировал ваше сообщение, чтобы исправить это, но вы должны понимать, что нет необходимости явно закрывать файл при использовании оператора «with» AKA менеджер контекста , потому что они обрабатывают это автоматически для вас.

...