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,而不是整行。
答案 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')