Bor*_* Me 3 python file python-3.x
我有这段 python 代码,它通过文本文件 (urls.txt) 中的 url 列表循环,然后跟踪所有 url 的重定向,如果 url 包含特定字符串,则将其写入名为 redirects.txt 的文件
import urllib.request
import ssl
redf = open('redirect.txt', 'w')
with open('urls.txt') as f:
for row in f:
#try:
context = ssl._create_unverified_context()
finalurl = ''
try:
res = urllib.request.urlopen(row, context=context, timeout=10)
finalurl = res.geturl().strip()
except:
#remove from list
print("error:"+finalurl)
# filedata = file.read()
if finalurl.strip():
if "/admin/" in finalurl:
redf.write(finalurl+"\n");
Run Code Online (Sandbox Code Playgroud)
问题是在创建redirect.txt 文件之前,我必须等待整个URS 处理完毕。
我怎样才能实时写作?
文件已创建,但由于您的输出很小,很可能在文件关闭之前它都卡在写缓冲区中。如果您需要更迅速地填充文件,请通过以下方式以行缓冲模式buffering=1打开它:
open('redirect.txt', 'w', buffering=1)
Run Code Online (Sandbox Code Playgroud)
或flush在 each 之后write,通过显式调用flush:
redf.write(finalurl+"\n")
redf.flush()
Run Code Online (Sandbox Code Playgroud)
或者,由于您无论如何都要添加换行符,因此您也可以使用printwithflush=True让它为您工作:
print(finalurl, file=redf, flush=True)
Run Code Online (Sandbox Code Playgroud)
旁注:您真的想对打开的文件使用with语句,特别是,但您只将它用于正在读取的文件(它不太重要,因为最坏的情况只是延迟句柄关闭,而不是丢失的写入)。否则异常会导致文件被刷新/关闭的任意延迟。只需将两个打开合二为一with,例如:
with open('urls.txt') as f, open('redirect.txt', 'w', buffering=1) as redf:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4178 次 |
| 最近记录: |