Docker Desktop 之access permissions故障排除

前两天Win10系统有更新,重启更新了。Ollama随开机自启动,也提示有更新,随手也更新了。结果昨天打开Docker Desktop,想跑跑Qwen2,结果出现错误提示:

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3000 -> 0.0.0.0:0: listen tcp 0.0.0.0:3000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

按照文心一言的提示:检查端口占用

终端输入命令:netstat -ano | findstr :3000,直接返回提示符。

端口未被占用

略去各种小坑,最终找到命令:netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围
开始端口 结束端口


1067 1166
1267 1366
1367 1466
1467 1566
1567 1666
1667 1766
1867 1966
2563 2662
2763 2862
2863 2962
2963 3062
3063 3162
3163 3262
3263 3362
5357 5357
6919 7018
7019 7118
9030 9030
50000 50059 *
*- 管理的端口排除。

原来是设置的端口被限制,重新设置一个开放的端口,Ollama 的open webui链接打开。

python word 自动化 替换 保留格式

在实训平台中,实训报告不能按学校模版定制封面。想到运用python从学生名单(.xlsx)中提取学号和姓名,自动填写到实训报告封面(.docx)。用xlwings、docx库很容易的实现了自动填写,但是替换段落的格式发生变化,就这个小坑填了半天。参考《python-docx保留格式替换其中的文字》与《python docx 替换段落中子字符串后如何保持原格式》,明确了只有用run.text.replace才能保留原格式。因此,问题只剩让在run.text中识别需要替换的字符串为一个run,而run的识别受字符类型、格式变化的影响。因此,模版内的姓名用全角符’XXX’,学号用xx。具体代码如下:

from docx import Document
import xlwings as xw
import os

data_path=r'D:\***\***\实训名单.xlsx'
word_path=r'D:\***\***\实训报告模版.docx'
save_path=r'D:\***\***\20营销(专升本)2'

app = xw.App(visible=False, add_book=False)
app.display_alerts = False    # 关闭一些提示信息,可以加快运行速度。 默认为 True。
app.screen_updating = False    # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。

wb = app.books.open(data_path)
sht = wb.sheets["sheet1"]
data = sht.used_range.options(index=False, header=True).value
wb.close()
app.quit()

for row in range(1,33):
    s_no=data[row][0]
    name=data[row][1]
    if len(name) == 2:
        name1 = name[0] + '  ' + name[1]
    else:
        name1=name
    s_no1=s_no[10:12]
    print(s_no, name, name1)
    doc = Document(word_path)
    for p in doc.paragraphs:
        for run in p.runs:
            if "xx" in run.text:
                run.text = run.text.replace('xx', s_no1)
            if 'XXX' in run.text:
                run.text = run.text.replace('XXX', name1)
    save_name=os.path.join(save_path, s_no+'_'+name+'_'+"实训报告.docx")
    doc.save(save_name)

另外碰到一个问题,程序调试能够通过,但运行时报错。import win32api; ImportError: DLL load failed: 找不到指定的程序。估计是python库安装的问题,不影响结果,这个问题就先放一放了。

Geopands 中文乱码问题解决

Geopands读取地图数据shp文件,原始文件用Arcmap打开后中文显示正常,但是Geopands保存后,中文显示为乱码“?”。尝试更改Geopands读取时encoding,分别设为gb18030、utf-8或gbk,输出shp文件的中文还是乱码。参考《ArcGIS中文乱码问题详解》,《python geopandas读取保存文件中文属性乱码》,按照后者提示在Geopands读取时设置encoding为gbk,保存时encoding设置为utf-8,输出shp文件的中文正常了。

office365教育版 A3 申请与安装

之前某宝上三十大洋买的office账户到期,百度一下才知道有edu信箱可以申请office教育版。山青院现在还申请不了,邮箱不能接收微软的认证邮件,但是山财大的邮箱可以,于是再一次借老婆大人的光(之前是同济的正版windows)。一开始只申请到了office365教育版 A1,有正版的Onedriver可用了(之前某宝买的担心文件安全一直没用这个功能),但是这个版本不能安装office桌面应用,绕了两天弯路(找office2016的激活),百度导向到知乎中《office365教育版不能下载office软件?》,这才醒悟到之前买所谓正版账户也是他人免费申请的(灰色的),也知道了如果学校与微软有合作计划,有可能申请到桌面版和在线版都有的版本,而office365教育版的具体细分版本见《免费获取可供整个学校使用的 Office 365》。

从《Office 365 A1 Plus教育版桌面获取》知道,在office365教育版 A1基础上,通过链接https://account.activedirectory.windowsazure.com/r#groups加入组,然后就获得office365教育版 A3。虽然此文是说加入“武汉加油”组,抱着试试看的心态打开链接,发现自己无组可加,但是可以创建组,于是自创一个组(自然加入)后获得了office365教育版 A3。这样老婆的账号可以安5个电脑,两人各一台笔记本电脑,家里的一个台式机,还有办公室各一个台式机就能够用上正版了。从《如何获得office365教育版无期限》了解到全局管理员用户可以毫无保留的浏览你存储的文件、已经填写的个人信息和登陆IP地址,所以office365教育版 A3也还是有一些隐私权限与风险问题。

家里两台笔记本直接从设置-应用中很顺利卸载之前旧的office365,新的office365安装也很快(无线网络下载速度真比以前快,越来越理解浏览器就是系统与应用,什么都可以做成在线的)。家里台式机卸载时却出现错误提示,错误码是30016-4,下载微软专用卸载软件删也没用,覆盖安装更是别想。最后,还是按照微软官方的《手动卸载 Office》,一步一步删除了旧版,重启电脑后新版的安装更快(网线连的路由)。

以上office365教育版 A3申请与安装经验的备份,希望能帮助到其他老师。此外,这次还感觉到学校平台的差别,以及微软在教育方面的长线投入。最后,还是多谢老婆!

续:两天后office365教育版竟然又显示没有可用许可证,再到山财大网络信息中心的主页,发现2019年就有了正版软件栏目。我这纯粹属于兜兜转转一大圈,净是无用功。重新下载office2019安装光盘镜像与激活软件,连上山财大VPN,完成了家里所有电脑上office正版软件的安装。

Arcscan 矢量化过程的小坑

这两周绘制某区的全域旅游全景图,区里提供的底图数据是纸质地图的彩色照片。好在找到了LSV,既能下载最新的百度地图并导出为带地理信息的tif文件,还能直接导出全域旅游要素的地标文件。但是tif文件的清晰度有限,好在又在geofabrik找到了矢量地图数据。因此,底图仅需将tif文件矢量化以补上某条在建的高速公路数据。

参开《ArcScan进行自动矢量化的技术》,矢量化过程第一步是栅格图形二值化,Arcmap选择导入tif的一个band即可,然后在Symbology中自动补数值,选择二值分类;第二步是对栅格图像进行校正和配准,导出的tif文件自带地理位置数据,可以略过。

第三步是创建相应的点线面要素层,这一步没有过多介绍,这就是一个小坑。我开始创建要素层时设置为WGS84,结果矢量化后虽然有数据产生,但是不能与其它WGS84的要素层同比例显示,也不能与tif图同比例显示。试着矢量化后的图层转换坐标系,转换结果是空的图层。解决方法是:创建要素层时设置与tif同样的投影系,矢量化产生的数据能够与tif同比例显示,然后再转换为WGS84。这就算从小坑里爬出来了。

第四步就是Arcscan矢量化的参数设置,设置压缩、平滑等参数值,如果设计面要素,可在栅格清理菜单中选择擦除所选像元,矢量化可选择保存线的宽度等等。

此外,这两周的“干中学”切实体会到了Arcgis与Adobe Illustrator,以及Photoshop的生产力,在ArcGIS中直接将地图导出为.ai文件,然后Adobe Illustrator导入后修改线型、添加文字,修改图例,修改好后导出pdf文件,最后在PS中调整导出图片的尺寸与像素大小。

正则表达式与CSV文件操作

从云班课平台中导出的学生作业为zip文件,解压后是一个作业文件夹,在其中的学生子目录(按学号+姓名命名)中有.html文件。希望将所有学生的答案以csv格式保存、方便对比批阅。正好复习《Python爬虫开发 从入门到实战(微课版)》,稍微改改第3章正则表达式与文件操作的案例代码完成了作业汇总的任务。

import os
import re
# import csv
import pandas as pd

t_dir=r'D:\Users\yuanyujie\Documents\Downloads\旅管本191-旅游研究方法-专业兴趣与问题调查' #指定文件夹
result_list= [] #提取所需到包含字典的列表

for root, dirs, files in os.walk(t_dir):
for s_dir in dirs:
for sub_root, sub_dirs, sub_files in os.walk(os.path.join(root,s_dir)): #遍历子目录与文件
for f_list in sub_files:
if f_list[-4:]=="html":
print(s_dir, f_list)
url=os.path.join(root,s_dir,f_list) #文件绝对路径
print(url)
htmlf = open(url,'r',encoding='utf-8') #打开文件
htmlcont = htmlf.read() #读取文件内容
content_list=re.findall('<span>(.*?)<',htmlcont,re.S) #正则表达式
name_list=s_dir[13:]
num_list=s_dir[:12]
result = {'num':num_list,
'name':name_list,
'content':content_list
}
result_list.append(result) #列表追加元素字典

print(result_list)

df = pd.DataFrame(result_list) #包含字典的列表直接转Dataframe
print(df)
os.chdir(t_dir) #指定工作目录
df.to_csv('test.csv',encoding='ansi') #保存csv文件

# with open('test01.csv','w',encoding='utf-8') as f:
# writer=csv.DictWriter(f,fieldnames=['num','name','content'])
# writer.writeheader()
# writer.writerows(result_list)

if os.path.exists('test.csv'):
print('Done')
else:
print('Try Again')

写代码时碰到两个问题,一是.html文件直接用open命令打开后,还需要read命令读取内容,二是文件默认保存到工作目录,需要指定目录时要用os.chdir()。此外,发现包含字典的列转成Dataframe用一行代码就行,用pandas保存csv也是直接一行代码就行。保存时注意事项是编码需要设为ANSI,用utf-8保存再用Excel打开时中文会显示乱码。

Python批量图片转PDF

LP所教课程的在线期末考试结束,教秘按教学班汇总,试卷照片在教学班文件夹的学生子目录(按学号+姓名+专业+年级+班次命名)中。LP阅卷若直接浏览图片要点击更换目录,这也不方便保存批阅记录。针对以上问题,我用python编程将每个子目录内的图片转pdf,同时以学号+姓名方式保存。最后手工在Acrobat pro中合并,旋转少数横拍的页面,得到每个班级的试卷pdf文件。

在Python中图片转pdf用第三方库pymupdf,第一天用pip或conda直接安装都报错,然后从pypi下载.whl安装也报错。第二天参考《Python将图片转成pdf(高清)论文党用~》输入命令,安装进行一段后还是报错。但是,从安装命令指定镜像得到启发,首先参考《Anaconda安装详解、配置清华镜像和常用命令行集锦》设置镜像,但是conda安装还是出错。于是再改用pip安装.whl文件,依然报错。看到pymupdf文档提示”The wheels are self-contained, i.e. you will not need any other software nor download / install MuPDF to run PyMuPDF scripts.”,于是百度该错误提示,结果发现是版本不对的原因,重新在pypi中下载Python3.7的.whl文件,pip安装成功。以上安装第三方库走了好多弯路。

接下来参考《Python 图片与pdf相互转换》,《python获取某目录下(含子目录)所有文件名称》以及《Python中os.walk函数的用法(遍历文件夹下文件并获得路径)》,写完代码比较顺利的一遍跑通。代码如下:

import os
import fitz

t_dir=r'E:\教学\资源与环境经济学1802'            #指定班级文件夹

for root, dirs, files in os.walk(t_dir):
    for s_dir in dirs:
        for sub_root, sub_dirs, sub_files in os.walk(os.path.join(root,s_dir)):
            print(s_dir[:len(s_dir)-12], sub_files)
            doc = fitz.open()
            d_name=os.path.join(root,s_dir[:len(s_dir)-12])
            for f_list in sub_files:
                img_name=os.path.join(root,s_dir,f_list)
                imgdoc = fitz.open(img_name)     # 打开图片
                pdfbytes = imgdoc.convertToPDF() # 使用图片创建单页的 PDF
                imgpdf = fitz.open("pdf", pdfbytes)
                doc.insertPDF(imgpdf)            # 将当前页插入文档
            doc.save(d_name + ".pdf")            # 保存pdf文件
            doc.close()

四个班级中各位学生的试卷照片都在班级文件夹中转换为单独的pdf,再用Acrobat pro合并与旋转调整页面,然后发给LP用福昕阅读器批改。

网站备案迁移的叨叨

域名是在万网买的,备案也是在万网代备案系统中完成。

但是万网的主机服务有点贵,所以还是买了华夏名网的主机服务。

等个人网站开通两个礼拜后,收到万网的邮件提醒:备案将被注销!因为备案与主机的服务运营商不同,按规定要将备案迁移或购买万网主机。

对我而言其实只有一个选项,于是开始备案迁移。而万网的域名解析先关闭,个人网站也就停了下来。

备案迁入华夏名网需要带背景图的个人照,本着节约原则自己ps了一张。

但是个人ps技术水平有限,照片通不过代办备案人员的法眼。拖了3个月后,总算找到一次顺路机会去指定的核验点完成拍照并上传。

上周已在万网重新解析域名,开通网站,而昨天收到工信部短信通知,告知备案迁移完成。

这一圈下来呀,网站总算名正言顺的上线了。

酒店信息化与电子商务

到山东青年政治学院旅游学院工作后,我开设了《旅游电子商务》课程,对所选教材总有不满意的地方,正好碰上北大出版社组织教材选题,因此有了自己主编一本教材的契机。

在前言中阐述了教材《酒店信息化与电子商务》的编写目标:

“酒店业是旅游业的传统三大支柱行业之一,也是旅游业中较早开展信息化建设,企业管理信息化水平较高的行业。已有不少的酒店信息化与电子商务专业教材,但是这些教材与旅游电子商务教材具有相似的三种倾向:第一、专业技术倾向,较多采用计算机专业的术语,介绍酒店相关系统与网站的开发技术;第二、理论研究倾向,大量列举酒店信息化与电子商务的案例,阐述相关概念、战略与策略;第三、实践操作倾向,主要介绍某款酒店管理软件的操作,一定程度上属于软件操作手册的改版。

上述教材分别侧重于培养学生的酒店信息化与电子商务的软件开发、理论分析与操作技能,本教材编写者希望针对酒店业界的实际需求,以及学生发展的长远目标,能在三种倾向之间寻找到一个平衡点,使得教材的结构设计合理、内容涉及广泛,教学目标明确。”

教材在北大出版社编辑的帮助与督促,在同事的共同努力下得以出版,给个当当网的链接:

酒店信息化与电子商务

现在已有同行选用了这本教材,网上读者也有一些好评。但当时是初生牛犊般承编下来,如今明白好的教材才有机会一而再、再而三的修订。

以后如果有机会,打算在以下方面展开修订:第一、酒店管理信息系统软件的统一与教学辅助,第二、酒店电子商务方面教材内容的细化与充实。

世界,你好!第一天!

1、上传wp压缩包,由主机控制面板中的文件在线管理自动解压,然后配置数据库,安装成功。

2、尝试直接更改/wordpress目录名为/blog,可查看主页,但是登陆后台时出错,wp小白的第一天。

3、参考http://www.fanicy.com/install_wordpress_in_sub_folder.html,改回目录名并设置根目录访问。