清理 URL 并将其保存到 txt 文件 Python3
Cleaning URLs and saving them to txt file Python3
我正在尝试清理和规范化文本文件中的 URLs。
这是我当前的代码:
import re
with open("urls.txt", encoding='utf-8') as f:
content = f.readlines()
content = [x.strip() for x in content]
url_format = "https://www.google"
for item in content:
if not item.startswith(url_format):
old_item = item
new_item = re.sub(r'.*google', url_format, item)
content.append(new_item)
content.remove(old_item)
with open('result.txt', mode='wt', encoding='utf-8') as myfile:
myfile.write('\n'.join(content))
问题是,如果我在循环中打印新旧项目,它会显示每个 URL 都已清理。但是当我在循环外打印我的 URLs 列表时,URLs 仍然没有被清理,其中一些被删除,一些没有。
请问为什么当我在 for 循环中删除它们并添加清理后的 URL 时,为什么坏的 URL 仍然在列表中?也许这应该以不同的方式解决?
此外,我注意到使用大量 URL 代码需要花费大量时间 运行,也许我应该使用不同的工具?
我们将不胜感激。
这是因为您在迭代列表时从列表中删除了项目,这是一件坏事,您可以创建另一个包含新值的列表并附加到它,或者修改列表 in-place 使用索引,您也可以只使用列表理解来完成此任务:
content = [item if item.startswith(url_format) else re.sub(r'.*google', url_format, item) for item in content]
或者,使用另一个列表:
new_content = []
for item in content:
if item.startswith(url_format):
new_content.append(item)
else:
new_content.append(re.sub(r'.*google', url_format, item))
或者,修改列表 in-place,使用索引:
for i, item in enumerate(content):
if not item.startswith(url_format):
content[i] = re.sub(r'.*google', url_format, item)
我正在尝试清理和规范化文本文件中的 URLs。
这是我当前的代码:
import re
with open("urls.txt", encoding='utf-8') as f:
content = f.readlines()
content = [x.strip() for x in content]
url_format = "https://www.google"
for item in content:
if not item.startswith(url_format):
old_item = item
new_item = re.sub(r'.*google', url_format, item)
content.append(new_item)
content.remove(old_item)
with open('result.txt', mode='wt', encoding='utf-8') as myfile:
myfile.write('\n'.join(content))
问题是,如果我在循环中打印新旧项目,它会显示每个 URL 都已清理。但是当我在循环外打印我的 URLs 列表时,URLs 仍然没有被清理,其中一些被删除,一些没有。
请问为什么当我在 for 循环中删除它们并添加清理后的 URL 时,为什么坏的 URL 仍然在列表中?也许这应该以不同的方式解决?
此外,我注意到使用大量 URL 代码需要花费大量时间 运行,也许我应该使用不同的工具?
我们将不胜感激。
这是因为您在迭代列表时从列表中删除了项目,这是一件坏事,您可以创建另一个包含新值的列表并附加到它,或者修改列表 in-place 使用索引,您也可以只使用列表理解来完成此任务:
content = [item if item.startswith(url_format) else re.sub(r'.*google', url_format, item) for item in content]
或者,使用另一个列表:
new_content = []
for item in content:
if item.startswith(url_format):
new_content.append(item)
else:
new_content.append(re.sub(r'.*google', url_format, item))
或者,修改列表 in-place,使用索引:
for i, item in enumerate(content):
if not item.startswith(url_format):
content[i] = re.sub(r'.*google', url_format, item)