常用的操作
开始时间是当天的0点
# 开始时间是当天的0点 now_date_str = until.strftime("%Y-%m-%d") year, month, day = now_date_str.split("-") since = datetime(int(year), int(month), int(day), 00, 00, 00)
同时读取同一目录下的多个文件
类似于这样的问题还是很常见的,比如说我现在某个目录下有三个文件:
里面的内容分别如下:
# 李白.txt 飞流直下三千尺 疑是银河落九天 (李白end) # 杜甫.txt 安得广厦千万间 朱门酒肉臭 路有冻死骨 (杜甫end) # 白居易 野火烧不尽 春风吹又生 (白居易end)
现在的需求是:将这三个文件的内容合并在一个文件中。
直接上代码:
# -*- coding:utf-8 -*- import os import fileinput from glob import glob def line_generator(path): for line in fileinput.input(glob(os.path.abspath(os.path.expanduser(path)))): yield line if __name__ == '__main__': base_path = os.path.dirname(os.path.abspath(__file__)) print(">>>",base_path) # >>> /Users/wanghongwei/PycharmProjects/redis_test file_dir_path = os.path.join(base_path,"data") print(">>>>>",file_dir_path) # >>>>> /Users/wanghongwei/PycharmProjects/redis_test/data f_path = os.path.join(file_dir_path,"*.txt") print("<<<",f_path) # <<< /Users/wanghongwei/PycharmProjects/redis_test/data/*.txt # 得到的是一个生成器 lg = line_generator(f_path) # 整合这些文件中的内容 写到一个新的文件中去 with open("./combine.txt","w") as fw: for line in lg: fw.write(line)
注意一个问题
需要注意,要是合并到一个文件的话,每个文件的最后一行必须得留一行空行!否则合成的文件会是这样的:
安得广厦千万间
朱门酒肉臭
路有冻死骨
(杜甫end)野火烧不尽
春风吹又生
(白居易end)飞流直下三千尺
疑是银河落九天
(李白end)
重试操作的模块
需要手动安装第三方模块:
pip3 install retrying -i https://pypi.douban.com/simple
有时候我们的爬虫程序会由于网络问题而失败,失败之后的处理重试是一件很麻烦的事情,有一个第三方模块可以很好地处理好这个问题。
# -*- coding:utf-8 -*- import requests import retrying def retry_if_timeout_error(exception): return isinstance(exception, requests.exceptions.ConnectTimeout) # 仅在捕获到超时异常的时候才进行重试 @retrying.retry(retry_on_exception=retry_if_timeout_error,stop_max_attempt_number=3) def fetch_http1(url): try: resp = requests.get(url, timeout=0.0001) return resp except requests.exceptions.ConnectTimeout: print("连接超时...") # 无论出现任何异常最多重试3次 @retrying.retry(stop_max_attempt_number=3) def fetch_http2(url): try: resp = requests.get(url, timeout=5) return resp except Exception: print("连接异常......") if __name__ == '__main__': url = "https://www.baidu.com" ret1 = fetch_http1(url) print("ret1>>>>",ret1)
~~~