gpt4 book ai didi

python - 如何从文件中删除重复行并将它们写入 Python 文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:23 25 4
gpt4 key购买 nike

下面的代码获取 HTML 文件中的所有链接并将其写入文本文件。但它也在复制重复的行(链接)。有什么方法可以确保它不会写入文件中已有的链接吗?有什么方法可以让我不必手动编写功能代码?

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

def handle_starttag(self,tag,attrs):
if tag=="a":
if attrs.__len__>0:
for a in attrs:
if a[0]=="href":
print a[1]
f=open("index_link.txt","a+")
f.write(a[1]+"\n")

def main():

parser=MyHTMLParser()
f=open("index.html")
if f.mode=="r":
contents=f.read()
parser.feed(contents)
else:
print ("No file found")
f=open("textfile.html","w+")
f.write(contents)

if __name__=="__main__":
main()

最佳答案

您需要自己记录找到的链接,例如使用 set:

class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.links_found = set()

def handle_starttag(self,tag,attrs):
if tag=="a" and attrs:
for a in attrs:
if a[0]=="href" and a[1] not in self.links_found:
self.links_found.add(a[1])
print a[1]
with open("index_link.txt","a+") as f:
f.write(a[1]+"\n")

如果你想保持链接的顺序,你也可以使用一个简单的列表,而不是直接将它们写入文件:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.found_links = []

def handle_starttag(self,tag,attrs):
if tag=="a":
attrs = dict(attrs)
if "href" in attrs and attrs["href"] not in self.found_links:
self.found_links.append(attrs["href"])

def main():
parser = MyHTMLParser()
with open("index.html") as f:
contents = f.read()
parser.feed(contents)
with open("index_link.txt","w") as f:
f.write('\n'.join(parser.found_links) + '\n')
with open("textfile.html","w") as f:
f.write(contents)

if __name__=="__main__":
main()

关于python - 如何从文件中删除重复行并将它们写入 Python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34628158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com