在一行之间的字符串之间写入文本

时间:2018-12-17 21:36:52

标签: python python-3.x praw

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年的帖子中收集了当前代码,有人对为什么这可能不起作用有任何想法吗?

当前目标是将findlink中的“测试”复制到extractlink.txt,而不是整行。

3 个答案:

答案 0 :(得分:0)

有人修改了您的帖子以解决此问题,但是您应该了解,在使用上下文管理器的“带有”语句时,无需显式关闭文件,因为他们会自动为您处理此问题。

答案 1 :(得分:0)

根据此[教程] [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(")")]

输出:

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()。

答案 2 :(得分:0)

一个简单的解析器:

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')