常用的操作

开始时间是当天的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)

~~~

posted on 2020-08-24 11:48  江湖乄夜雨  阅读(84)  评论(0编辑  收藏  举报