以下函数均由道无涯i封装,如果有更好的改进欢迎评论区指正!
完整路径拼接
def 完整路径拼接(fileName=None):
"""
适用于打包和直接运行的情况。
fileName为完整文件名,例 "测试.txt"
如果fileName为空,则返回当前程序所在目录;
如果fileName不为空,则返回 当前程序所在目录和fileName拼接后的路径
"""
if getattr(sys, 'frozen', False):
# 如果是打包后的exe文件
if fileName:
return os.path.join(os.path.dirname(sys.executable), fileName)
return os.path.dirname(sys.executable)
else:
# 如果是直接运行的.py文件
if fileName:
return os.path.join(os.path.dirname(__file__), fileName)
return os.path.dirname(__file__)
读取指定行
def 读取指定行(txt_path, line_number):
"""
读取txt文本的指定行
txt_path:txt文本路径
line_number:读取的行号
返回读取的文本内容
"""
with open(txt_path, "r", encoding='utf-8') as file:
lines = file.readlines()
if 0 <= line_number < len(lines):
return lines[line_number]
else:
return None
删除指定行
def 删除指定行(txt_path, line_number):
"""
删除txt文本的指定行
txt_path:txt文本路径
line_number:删除的行号
"""
# 读取文件所有行
with open(txt_path, "r", encoding='utf-8') as file:
lines = file.readlines()
# 检查行号是否有效
if 0 <= line_number < len(lines):
# 删除指定行
del lines[line_number]
# 将剩余的行重新写入文件中
with open(txt_path, "w", encoding='utf-8') as file:
file.writelines(lines)
else:
print("指定的行号无效!")
不重复写入文本
def 不重复写入文本(txt_path, content):
"""
将指定文本写入txt文件,如果txt文件内已存在该文本内容,则不写入
txt_path:txt文本路径
content:指定写入的文本
"""
已存在 = False
if os.path.exists(txt_path):
with open(txt_path, "r", encoding="utf-8") as f:
if content in f.read():
已存在 = True
print(f"文本已存在,不写入{txt_path}!")
f.close()
# 如果不存在相同的文本,则写入文件
if not 已存在:
print(f"将文本写入{txt_path}!")
with open(txt_path, "a", encoding="utf-8") as f:
if content.endswith("\n"): # 检查内容是否已经以换行符结束
f.write(content) # 如果已经以换行符结束,直接写入
else:
f.write(content + "\n") # 如果没有以换行符结束,添加一个换行符后写入
f.close()
提取代理ip
def 提取代理ip(link):
"""
根据link提取代理ip,并检测可用性,直到可用才退出函数
link:提取ip的url链接
返回提取到的可用的代理ip
"""
try:
# 获取代理ip
proxy = requests.get(link, timeout=5).text.strip()
print('正在使用代理:', proxy)
proxies = {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
}
# 先用 requests 检查代理是否可用
response = requests.get("http://httpbin.org/ip",
proxies=proxies, timeout=5)
response.raise_for_status() # 如果响应状态码不是 200,将抛出 HTTPError 异常
return proxy
except Exception as e:
print('该代理不可用,正在更换代理...', e)
time.sleep(1)
return 提取代理ip(link)
其他
以后遇到了再补充...