有什么办法能在本地快速地把 pdf 分享到 web 服务中吗?

有什么办法能在本地快速地把 pdf 分享到 web 服务中吗?

如题,需要阅读大量学术文献的时候,大部分是 pdf 格式的。

但是由于 chrome 默认打开 pdf 时不加载 js,导致自带的谷歌翻译,还有插件的划词工具都没法用,严重拖慢阅读速度。

有什么办法可以快速地把 pdf 放到网页上,然后让划词功能可以用吗?

requests 的 post 中的 data 如何按顺序进行封装?

requests 的 post 中的 data 如何按顺序进行封装?

假设 data 如下 data={

a = ’11’,

b = ’22’,

c = 某个变量,

d = 另一个变量,

e = ’33’

} 然后我 requests.post 理论来说 他 data 的顺序应该是 a=11&b=22…..依次按顺序,但是我测试抓包发现,他顺序是乱的,特别是变量,他可能会封装成 a=11&c=某个变量&d=另一个变量值&b=22….. 我想让他就按照从上往下的顺序进行封装起来,百度了下也没人问这类的问题,请问有解吗?

Python 图片去除图片水印的问题

Python 图片去除图片水印的问题

代码


def remove_water_footer(path, newPath):
    """
    去除水印
    """
    # https://zhuanlan.zhihu.com/p/138169619
    img=cv2.imread(path,1)
    hight,width,depth=img.shape[0:3]
    height = hight

    #截取
    # cropped = img[int(hight*0.8):hight, int(width*0.7):width]  # 裁剪坐标为[y0:y1, x0:x1]
    #cropped = cropped_img(img,
    #height=height,
    #width=width)
    cropped_size = cropped_img_size(
    height=height,
    width=width)
    cropped = img[cropped_size[0][0]: cropped_size[0][1], cropped_size[1][0]: cropped_size[1][1]]
    cv2.imwrite(newPath, cropped)
    imgSY = cv2.imread(newPath,1)

    #图片二值化处理,把[200,200,200]-[250,250,250]以外的颜色变成 0
    # thresh = cv2.inRange(imgSY,np.array([200,200,200]),np.array([250,250,250]))
    thresh = cv2.inRange(imgSY,np.array([24, 43, 48]),np.array([160,180,190]))
    #创建形状和尺寸的结构元素
    kernel = np.ones((3,3),np.uint8)
    #扩展待修复区域
    hi_mask = cv2.dilate(thresh,kernel,iterations=10)
    specular = cv2.inpaint(imgSY,hi_mask,5,flags=cv2.INPAINT_TELEA)
    cv2.imwrite(newPath, specular)

    #覆盖图片
    imgSY = Image.open(newPath)
    img = Image.open(path)
    # img.paste(imgSY, (int(width*0.7),int(hight*0.8),width,hight))
    img.paste(imgSY, (cropped_size[1][0],cropped_size[0][0],cropped_size[1][1],cropped_size[0][1]))
    img.save(newPath)
    logger.info("去除水印: `{}` => `{}`".format(path, newPath))

我在网上搜的,但是这个样子会留下背景版,如果吧整个水印都删除呢,

也就是指定区域的部分都删除,这种效果该怎么做呢?

Python3.5 版本应该如何快速搭建 web 服务?

Python3.5 版本应该如何快速搭建 web 服务?

如题,生产环境有一套嵌入式 python,基于 3.5 版本不能修改。想要通过 web 服务进行控制,而且*好不依赖第三方库,有什么代码可以快速实现一个基础的基于 http (或者 tcp )进行远程调用的服务吗?

第 1 条附言  ·  2 小时 33 分钟前

贴个条更新一下目前的信息:

1、aiohttp可以在3.5运行,不好用

2、bottle我试了,但是因为内核线程管理策略的原因,平台导致效率应该会比异步低很多,不过应该也堪用。bottle的问题是,本身没法支持ssl协议,http在大量通信的情况下可能出现错误。。。试了试安装旧版本的werkzeug和openssl这些,openssl我没有安装成功

关于 Django 执行单独文件时导入内部包的问题

关于 Django 执行单独文件时导入内部包的问题

.
├── django_web
│   ├── RealTimeData
│   │   ├── init.py
│   │   ├── admin.py
│   │   ├── apps.py
│   │   ├── migrations
│   │   │   ├── 0001_initial.py
│   │   │   ├── init.py
│   │   ├── models.py
│   │   ├── sql_api_test.html
│   │   ├── templates
│   │   │   └── RealTimeData
│   │   │   └── index.html
│   │   ├── tests.py
│   │   ├── urls.py
│   │   └── views.py
│   ├── init.py
│   ├── db.sqlite3
│   ├── django_web
│   │   ├── init.py
│   │   ├── asgi.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── manage.py
└── main.py

这是文件结构,同时 main.py 处在一个 django_web 的文件夹下。
现在的问题是:当我单独执行 main.py 文件时,导入 RealTimeData 的模块出现 ModuleNotFoundError 。

然而在配置 DJANGO_SETTINGS_MODULE 时引用 settings 文件是没问题的。sys.path 也包含了 main.py 的父目录的路径。

print(sys.path)
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘django_web.django_web.settings’)
django.setup()

from django_web.RealTimeData.models import RowRecord

Python 关于字典的操作

需求是将两个列表合并,如果 err_data 中的 id 与 new_data 中的 id 重复,那么就把 err_data 中的项去掉,各位彦祖,合并后的顺序无所谓,求一个较好的方法。

err_data = [
    {'id': 1, 'data': 23},
    {'id': 2, 'data': 24},
    {'id': 3, 'data': 25},
    {'id': 4, 'data': 222},
    {'id': 5, 'data': 134},
    {'id': 6, 'data': 255}
]

new_data = [
    {'id': 1, 'data': 345},
    {'id': 2, 'data': 124},
    {'id': 28, 'data': 124},
    {'id': 29, 'data': 124},
    {'id': 30, 'data': 124}
]

# 需求是将两个列表合并,如果 err_data 中的 id 与 new_data 中的 id 重复,那么就把 err_data 中的项去掉,
# new_data + err_data 的结果如下
result = [
    {'id': 3, 'data': 25},
    {'id': 4, 'data': 222},
    {'id': 5, 'data': 134},
    {'id': 6, 'data': 255},
    {'id': 28, 'data': 124},
    {'id': 29, 'data': 124},
    {'id': 30, 'data': 124},
    {'id': 1, 'data': 345},
    {'id': 2, 'data': 124},
]

日志树的生成

各位大佬,请教一个问题 这种日志树是怎么生成的? 。。。 发现了一个问题 V2EX 无法发图片 算了 直接看他的返回格式

com.cityminsu.rba.baseinfo.api.vo.ProductVo
├──价格结束时间:'Mon Nov 15 00:00:00 CST 2021'->'Tue Mar 22 16:29:00 CST 2022'
├──产品状态:'下架'->'上架'
├──规则模版
│    ├──是否可退:'取消扣全款'->'限时取消'
│    ├──rbaRatePlanScope
│    │    └──rbaRatePlanScopeList
│    │         ├──:添加 '[houseList=[0]=0;orgId=0]'
│    │         └──:删除 '[houseList=[0]=0;orgId=0]'
│    └──stayDaysProduct:添加 '[[StayDaysProductVo{productId=null, stayDays=2, discountRatio=80, productStatus=1, active=0}]=[active=0;discountRatio=80;productStatus=1;stayDays=2];[StayDaysProductVo{productId=null, stayDays=3, discountRatio=79, productStatus=1, active=0}]=[active=0;discountRatio=79;productStatus=1;stayDays=3];[StayDaysProductVo{productId=null, stayDays=5, discountRatio=77, productStatus=1, active=0}]=[active=0;discountRatio=77;productStatus=1;stayDays=5];[StayDaysProductVo{productId=null, stayDays=7, discountRatio=75, productStatus=1, active=0}]=[active=0;discountRatio=75;productStatus=1;stayDays=7]]'
├──价格开始时间:'Wed Aug 18 00:00:00 CST 2021'->'Wed Aug 18 16:29:00 CST 2021'
├──平日价:'0.00'->'1000.00'
└──周末价:'0.00'->'1000.00'
  覆盖方式: '不覆盖日历上单独设立价格'

可以看到他返回的就是这种树状结构 请问是怎么实现的

怎么才能高效地将长话单拆分成按小时分解的多条短话单?

怎么才能高效地将长话单拆分成按小时分解的多条短话单?

原始话单是这样的:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 23:56:27 1 精灵宝可梦

老板让分析每个用户各个时段都在看啥,所以我想吧话单拆分成这样:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME PERIODTIME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 20:00:00 1 精灵宝可梦 2021-05-24 19:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 20:00:00 2021-05-24 21:00:00 1 精灵宝可梦 2021-05-24 20:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 21:00:00 2021-05-24 22:00:00 1 精灵宝可梦 2021-05-24 21:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 22:00:00 2021-05-24 23:00:00 1 精灵宝可梦 2021-05-24 22:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 23:00:00 2021-05-24 23:56:27 1 精灵宝可梦 2021-05-24 23:00:00

目前的方法是根据起止时间生成时间序列,然后 for 循环生成新的行,再拼接成一个新的 dataframe

# split_data
...
for i in range(0, len_date-1):
    df_y['Period'] = date_rng[i]
    df_y['EndTime'] = date_rng[i+1]
    df_y['StartHour'] = date_rng[i]
    df_y['EndHour'] = date_rng[i+1]
    df_x = df_x.append(df_y)
...

主函数还要写个 for 循环遍历整个话单

for i in range(len(df_tmp)):
    df_x = split_data(df_tmp.iloc[i])
    df_t = df_t.append(df_x)
df_t

这样能获得想要的结果,但话单太多了,跑起来没完没了……

有没有更好的方法能提高下效率?