单项式的笔记本 - Python
type: channel
link: https://bcmonomial.xyz/tag/Python/
items: 听说你要用 Django 自己搭实验平台？（2——数据的发送和存储）
items: 听说你要用 Django 自己搭实验平台？（0——事前准备篇）
items: PsychoPy 简明扼要上手指南——进阶篇
items: PsychoPy 简明扼要上手指南——入门篇
items: Midnight_Radio 命令列表
items: 安装并使用 caj2pdf 的傻瓜式指南

听说你要用 Django 自己搭实验平台？（2——数据的发送和存储）
type: item
date: 2024-08-30T20:10:00+08:00
description: 本文是 Django 实验平台系列教程的第三篇。阅读本文前需要你先阅读前两篇文章。[post cid="382" cover="" size=""/][post cid="392" cover="" size=""/]完成前两篇文章的步骤之后，你的手上应该有一个可以 Hello World 的 onlineExperimentTutorial。我们在这个基础上研究下面的流程。0 基本流程和概念在上一篇文章的末尾，其实我们已经把这个系统需要的核心功能梳理出来了：如何让实验程序发出数据？如何建立并管理 Django 模型？Django 视图如何接收实验程序的数据？如何处理这些数据？如何储存这些数据？到这里，需要引入一些基本的概念，我们来一条一条解决。0.1 网站如何和你的客户端交换数据？隆重介绍：HTTP 协议。没错，就是你在浏览器里看到的这个 HTTP。它是你和网站交互时沟通信息的指定方法。它的全称叫做“超文本传输协议（Hyper Text Transfer Protocol）”。它所传输的内容，也就是“超文本”——基本上仍然是文本，但不只是文本。如果拥有 jsPsych 的基础的话，你已经知道网页实验程序的本质是什么了——一大段一大段的文本、代码。这些代码通过 HTTP 协议发送到你的浏览器里，浏览器解析这些文本，并加载对应的内容，就变成了你所看到的网页。想要更进一步了解 HTTP 的相关内容的话，可以移步HTTP 教程 | 菜鸟教程。我们稍微快进一点。我们的目标是“让实验程序发出数据”。发出数据应该怎么做呢？HTTP 协议规定了五种标准的方法（method），分别如下：GET：请求从服务器获取指定资源。这是最常用的方法，用于访问页面。POST：请求服务器接受并处理请求体中的数据，通常用于表单提交。PUT：请求服务器存储一个资源，并用请求体中的内容替换目标资源的所有内容。DELETE：请求服务器删除指定的资源。HEAD：与 GET 类似，但不获取资源的内容，只获取响应头信息。通常访问网页时，我们的浏览器发出的是 GET 请求。那么上传一段数据应该用什么请求呢？答案是 POST 请求。注意，并不是 PUT，PUT 的作用是上传一个文件。虽然大家眼中的实验数据确实是以文件形式储存的，但我们在后续的操作中并不会手动去上传一个文件——我们会让实验程序直接把数据发送到服务端，再让服务端对数据做处理。（而且在现在实际的应用中，PUT 请求真的已经很少用了。）0.2 Django 如何管理数据？上一篇文章提过，Django 的架构是这样的：所以，很自然地，我们需要去模型里面处理数据。我们先试试如何建立一个模型。0.2.1 如何正确地创建一个模型？首先，我们要在 Django 项目里新建一个应用（app）。进入这个项目对应的终端（请回顾前面的教程），然后运行以下命令：django-admin startapp myapp应用是 Django 里的一种功能单元，你可以把不同的功能写在不同的 app 里，这对于日后维护代码有很大的帮助。创建成功后，你会在目录里看到这样的一个东西：注意，models 必须在 app 内调用，不能在项目的根目录调用。打开 models.py。让我们来随便写点什么：from django.db import models # Create your models here. class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) 我们创建了一个叫做 Person 的模型，并指定了两个变量：first_name 和 last_name。0.2.2 注册并执行迁移接下来，我们要怎么让 Django 知道这个模型的存在呢？为了在 Django 中注册这个模型，我们需要首先注册我们刚刚生成的应用。回到 \onlineExperimentTutorial\ 下面，找到这个叫 settings.py 的文件。这个文件管理的是整个项目的设置。打开它，看到大约 30 行左右的位置，找到 INSTALLED_APPS 这一项：接下来，我们还要执行一个步骤：迁移。回到终端，运行以下命令：python manage.py makemigrations python manage.py migrate这样的话，Django 就知道了这一个模型的存在，并在系统里注册好了这个模型。之后每次创建新的 app 或新的 model 时，你都需要执行一遍这个流程。这里究竟发生了什么？如果你想要知道这个问题的答案的话，这是一个更深层次的解释，但你也可以跳过这一段。Django 本体…

听说你要用 Django 自己搭实验平台？（0——事前准备篇）
type: item
date: 2024-08-01T16:42:00+08:00
description: 俗话说得好，自己动手丰衣足食，虽然我不知道为什么你会需要自己动手，但总之你这样做了（这个系列的教程会教你自己搭建一个能用的实验平台——可以在线收集数据，可以进行数据库管理的那种（而不需要手动下载文件再让被试发给你）。不过实话实说这个东西会比较糙，会有很多可以再优化的地方。0 首先，什么是 Django？Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。Django 提供了一套强大的工具和约定，使得开发者能够快速构建功能齐全且易于维护的网站。——Django 教程 | 菜鸟教程Django 使用了非常先进的 MVC 模型框架，做到了数据和调用分离，因此有着相当强大且易于维护的功能…………但你需要完全学会并且完全掌握 Django 吗？好像不需要。如果只是收数据的话，你甚至不需要给这个网站做一个能看的首页，你只要把你的实验程序放上来，然后做好数据交互就可以了。（当然，实验程序得是网页版的——或许你在用 PsychoPy 转写的 PsychoJS？或许你在用 jsPsych？但总之我们在这个系列的教程中假设你已经拥有了适用于浏览器的实验程序。）所以我们的目标其实只是想个办法构造一个东西，这个东西能够（1）从我们的实验程序中接收一串数据，（2）把接收到的这串数据保存到一个数据库里（当然，现阶段不考虑受攻击之类的安全问题之类的，只考虑能用）。怎么样，是不是轻松了很多？1 装环境然后，写完上一句话之后，我意识到一个问题——最痛苦的不是写代码，是装环境。然后我意识到我需要教大家装环境。环境（Environment）在这里指的是一个程序跑起来所依赖的所有东西——比如有的程序需要一些前置的工具包（学过 C++ 都知道需要先 #include，差不多类似这么个概念）。但是，众所周知装环境是个玄学问题。同样的代码有的人能跑，有的人就跑不了；有的人装环境一次就成，有的人就死活装不上。用过 E-Prime 的人都说好。Python 的环境虽然没有 E-Prime 那么玄学，但是也很痛苦。说这么多，总之想告诉大家一个核心是：报错很正常，有的时候多跑几次就好了。所以，出于方便本地开发和调试的原因，我推荐所有人都装一个 Anaconda。Anaconda 是一款主要面向科学计算的 Python 版本与环境管理器，能够自动帮你配置虚拟环境（让不同的程序调用不同的环境，而不用直接跑在最底层上），避免你一不小心把电脑上的整个 Python 全部炸掉（而我真干过这事）。1.1 安装 Anaconda考虑到网络原因，这里并不推荐大家去官网下载 Anaconda。请访问清华大学开源软件镜像站，下载并安装最新版的 Anaconda。在此由衷感谢清华大学 TUNA 协会。下载，选个目录安装，注意整个目录必须是全英文的（不能有任何非英文字符，最好也不要有空格，否则会炸）。此外大致遵循 Anaconda 中文文档的说明就可以了。安装好之后，打开 Anaconda（会比较慢，多等一下），然后让它该更新更新，该重启重启，然后就可以看到它的主界面了：1.2 创建新环境在 Anaconda 主界面左边的工具栏中切换到 Environments 一栏，然后点击下方的 Create，创建一个新的环境。设置好环境名（这里输入的是 django_tutorial ，然后勾上 Python 选一个比较新的版本（我这里是 3.11，最新版 Django 要求至少 3.10）。[scode type="blue" size=""]如果你遇到了和我一样，在界面里加载不出 Python 版本的问题，那么请点击 base (root) 旁边的箭头，选择 Open Terminal，输入这样一行命令手动创建一个新的环境：conda create --name django_tutorial python=3.11[/scode]1.3 安装 Django切换到我们刚刚创建好的 django_tutorial 环境（会加载一会），点击旁边的绿色小箭头，选择 Open Terminal 运行这个环境：这里会弹出一个命令行窗口，输入如下指令安装 Django：pip install django然后去泡杯奶茶吧。装起来会需要一点时间的。1.3.1 装不上怎么办——使用清华大学 TUNA 镜像因为网络原因，不出意外的话大部分同学是装不上的。所以这里需要大家配置一下，这里仍然使用清华大学 TUNA 镜像。你可以根据 TUNA 协会的这篇指南更换镜像源，但如果你看不太明白里面在说什么的话，下面是一个更通俗的逐步教程。打开 base (root) 环境，输入命令 conda config --set show_channel_urls yes 并执行。前往你的电脑用户文件夹。你应该会看到用…

PsychoPy 简明扼要上手指南——进阶篇
type: item
date: 2022-07-27T21:45:00+08:00
description: [hplayer][Music server="netease" id="29774186" type="song"/][/hplayer]开始之前[post cid="216" cover="" size=""/]建议在基本掌握 PsychoPy 操作后阅读本文。可参考前述的入门篇指南。前言前略，这一篇主要是作为 PsychoPy 入门后的一些小技巧讲解，大多以我自己的经验出发，篇幅应该会短很多，也不会像入门篇那样讲解得非常细致，整体结构也会比较松散一些。也因为是从自己的角度出发，所以我自己还没涉及过的东西（脑电啊、眼动啊）我肯定也不会做，还是那句话：[scode type="yellow" size=""]本文无意成为一篇全面详尽的 PsychoPy 指南，本文作者也并不具有这样的实力与能力。本文希望做到的是能让阅读者快速了解这一工具，可以在较短时间内掌握其使用方法。如在开发、使用过程中遇到问题，官方文档与搜索引擎是更好的资料来源。[/scode]0. 关于颜色的那些事PsychoPy 的默认背景颜色是非常中性的一种灰[128, 128, 128]，默认文字颜色是纯白色[255, 255, 255]。有的时候这种灰色可能不太好，我们希望使用黑色作为底色，这个可以在实验设置中修改。点击顶上的 ⚙️ Edit experiment settings 按钮，选择 Screen 选项卡：在 Color 一栏填入颜色代码或颜色字符串即可，具体可用的颜色可点击右边的按钮查看：[scode type="blue" size=""]版本较老的 PsychoPy（如2021.2.3，脑岛的推荐版本）在将 RGB 三色代码转换至 Javascript 时存在 bug，无法将其正确映射为数组形式，因此转换出来的程序无法运行。如果有相应的线上实验需要，请直接使用颜色词汇。[/scode]1. 时间随机化很多实验会要求对注视点或者空屏时间进行随机化，防止被试进行预测或形成习惯化，影响实验结果。较新版的 PsychoPy 里预设了随机注视点的 Routine，可以参照学习一下：如果使用的是旧版 PsychoPy 也没关系，我们可以仿照它的模式自己写一个：这里使用了一个random()函数，可以生成 0 到 1 范围内的随机数，因此这里的持续时间便是 1 到 2 秒内随机。如法炮制，如果我们想要实现 400-600 毫秒内随机呢？[scode type="blue" size=""]可能有会 Python 的同学这里就要问了，Python 里还有别的随机函数，而且写起来更简单，更简短。但是我的实验结果是，不行。因为不知道 PsychoPy 引入了一些什么库，把什么样的指令引入到了什么样的程度，我尝试的各种更加简单的随机化代码都运行不起来，反而是这种写法最稳定。当然你也可以在头部 import 一点别的什么东西，但是这些东西只会适用于 Python 环境，所以如果想要做线上实验的话还是……就这样吧。[/scode]2. 提供反馈大多数简单的实验应该是不需要这个操作的，但是这个操作的知识（比如变量赋值、变量传递等）可以为后面的东西打下基础。假设在 Stroop 任务中，我们需要在被试的练习阶段为被试提供正确与错误的反馈，被试做出正确反应则显示绿色的反馈词，错误反应则为红色，到这里，纯 GUI 的编辑功能已经满足不了我们了，我们需要用到 PsychoPy 里的代码组件了。[scode type="yellow" size=""]我的 Python 水平也非常有限，这些代码通常都是现学现卖现抄的，所以如果有其他需求的话，可以考虑先自学一下 Python。[/scode]先假设我们已经设置好了各种指导语和实验用的 routine，分别是Instruction practice trial endings （实际情况要比这个复杂，会有多个指导语，这里仅为举例进行简化），在trial中有一个叫做trial_key_resp的键盘组件作为反应接收组件，并且已经载入了正确的条件文件，可以判断被试输入的正确与错误。大致应该和下面的图一样：我们梳理一下流程：我们需要从practice中获取几个变量（在这里，我们需要被试的反应时、被试的反应是否正确），将其显示在反馈中。我们在practice后面插入一个新的 Routine，命名为feedback，作为我们提供反馈的部分。随后，我们在feedback里添加一个代码组件（Code）：可以看到，这里有六个选项卡，分别对应六种运行的时机：Before Experiment：在实验文件加载前就加载，即放在所有代码的最开头运行Begin Experiment：在实验文件初始化时加载，即和其他初始化代码同步运行Begin Routine：…

PsychoPy 简明扼要上手指南——入门篇
type: item
date: 2022-07-18T22:01:00+08:00
description: [hplayer][Music server="netease" id="35470288" type="song"/][/hplayer]前言容我想想要从哪开始写啊……前一阵子因为各种机缘巧合，接触到了 PsychoPy 这个工具，而且真用它完整做完了一整套从设计到分析数据出结论的实验流程。用完之后的感受是：比 EPrime 高到不知道哪里去了.jpg在这之后，又因为一些其他的机缘巧合，就有了写这篇指南的想法，希望能帮助一些后来的朋友了解、使用 PsychoPy。所以，这篇文章意在使 0 基础的朋友快速了解、上手使用 PsychoPy，并掌握使用 PsychoPy 完整进行一次实验的能力。开始吧！0. 什么是 PsychoPy？能吃吗？怎么吃？好不好吃？当然在具体进入教程之前，首先要介绍一下这个工具本身。PsychoPy 是一款基于 Python 开发的心理学工具包，旨在提供一套足够强大、现代化的工具，帮助各界心理学者设计、开展实验。略去开发者啊，开发历程之类的东西，直接跳到“PsychoPy 的特殊之处”，也就是为什么我们会选择 PsychoPy 的问题上：它的能力足够强大：从简单的文本、图像到视频、量表；从静止刺激到动态刺激，从普通的按键反应到滑动条、输入框等交互式程序，甚至还支持脑电眼动仪等复杂实验仪器；它上手足够简单：对普通用户，提供现代化的图形设计界面，实验流程一目了然、简单明了；对高级开发者，也提供了代码编辑界面，可轻松修改程序；如果只有这两个优势的话，PsychoPy 只是一个大号的、现代化的 E-Prime （其实本来也是），真正让它不同于 E-Prime 的是下面三点：它具有良好的跨平台兼容性与可迁移性：底层架构基于 Python，可以在任何搭载了 Python 的平台上使用、运行，不会遇到奇奇怪怪的兼容性问题 （反观 E-Prime 程序，随便换台电脑就运行不起来了）；它拥有运行线上实验的能力：PsychoPy 可以将程序转译为 Javascript 脚本，从而可以在浏览器中在线运行实验程序；它是开源的自由程序：无需任何门槛与费用，任何人均可使用；如有需要，任何人均可直接修改其底层代码；与其他目前常用且流行的心理学实验开发工具进行比较的话，大概是这样：工具名上手难度可迁移性自由度在线实验MATLAB高（纯代码环境）中（需配置环境）高难以实现E-Prime中 （可视化编辑器+代码编辑器）低（换个机器就炸了）低几乎无法实现Inquisit高（纯代码环境）高（仅需浏览器插件）中完全支持jsPsych高（纯代码环境）高（基于网页开发）高完全支持PsychoPy中（可视化编辑器+代码编辑器）高（需配置环境）高完全支持当然，上面这张表取决于我的主观经验，可能有失偏颇，大致做个参考。总而言之，如果你满足以下的条件的话：想要使用相对简单的办法制作实验程序想要使用较为轻量的实验环境 （MATLAB 实在是太大了）想要实现跨平台的线上实验不希望与底层代码结构打太多交道我会建议你尝试 PsychoPy。1. 安装并配置 PsychoPy那么，这么好的东西，在哪里才能买得到呢？既然到了这里，可能得先说：[scode type="yellow" size=""]本文无意成为一篇全面详尽的 PsychoPy 指南，本文作者也并不具有这样的实力与能力。本文希望做到的是能让阅读者快速了解这一工具，可以在较短时间内掌握其使用方法。如在开发、使用过程中遇到问题，官方文档与搜索引擎是更好的资料来源。[/scode]在最开始，先介绍几个 PsychoPy 开发过程中最重要的网站：PsychoPy 官网：https://www.psychopy.org/PsychoPy GitHub 页面：https://github.com/psychopy/psychopyPsychoPy 论坛：https://discourse.psychopy.org/PsychoPy 问答：https://www.google.com/ （如无法访问，可使用 https://www.bing.com 代替）首先前往 PsychoPy 项目的 GitHub 发布页（https://github.com/psychopy/psychopy/releases），根据版本与系统下载对应的安装包（通常 400-700 MB 不等）。[scode type="blue" size=""]如果希望对接国内脑岛平台（https://naodao.com/）进行在线实验，推荐下载 2021.2.3 版本，该版本为脑岛支持的最高版本。如果无此类需求，仅在本地或自建网站开展实验，则推荐下载带有 latest标签的最新版（图上为 2022.2.2）。我反正两个版本都装了， 如果同时安装多个版…

Midnight_Radio 命令列表
type: item
date: 2022-01-03T18:26:00+08:00
description: [scode type="yellow" size=""]出于管理需求，Midnight_Radio 不自动接受各项邀请，以防滥用。私聊使用暂不限制。如需在群聊中使用本 bot，请联系单项式并将他本人和 bot 一起邀请至你的群里。[/scode]2023/07/08由yasu处继承B站链接功能2023/04/07整体升级，新增数个功能2022/07/11对大量插件进行升级，新增部分娱乐功能新增由 DOxide 开发的 sparkle 功能[collapse status="false" title="过往日志"]2022/02/21一定程度上恢复了核心功能运作。调整部分功能，新增部分功能。2022/01/06成功让抽卡插件跑了起来。2022/01/04机器人尚处风控期间，长消息可能无法发送。添加 MC 服务器功能与撤回功能。测试性添加 TRPG 相关功能。添加点歌插件。添加部分管理功能。[/collapse]使用须知本 bot 所用功能均需在指令前@或呼唤别名才可触发。如 @Midnight_Radio /帮助 或 mdp /帮助。bot 的可用别名包括：mist, 子夜。bot 有一部分隐藏功能，在此不列出（查询帮助用法：/帮助, /help, /指南会把这个页面的链接给你。回音用法：/echo <文本>bot 会原样返回你所输入的文本，通常用于测试 bot 是否在线。HarukaBotHarukaBot 是一款追踪并自动推送 B 站直播、动态的插件。此插件为本 bot 的核心功能。项目网站：https://haruka-bot.sk415.icu/[collapse status="true" title="HarukaBot 指令列表"]在未征得机器人主人同意前，请勿使用@全体功能。/关注 <UID>——关注账号/取关 <UID>——取关账号/关注列表——查看关注列表/开启动态 <UID>——开启账号的动态推送/关闭动态 <UID>——关闭账号的动态推送/开启直播 <UID>——开启账号的直播推送/关闭直播 <UID>——关闭账号的直播推送/开启全体 <UID>——推送时@全体成员（需管理员权限）/关闭全体 <UID>——关闭@全体成员（需管理员权限）/关闭权限——允许任何人操作 bot/开启权限——仅允许群主、管理员、超级用户（机器人主人）操作 bot[/collapse]B站AV、BV号转链接本功能继承自yasubot@机器人并附上AV、BV号，自动转换为链接无法正常处理封面图片，因此比起原版功能而言略有不足作息记录早晚安插件，可以记录作息。用法/早安、/晚安每日晚 21 点至第二天 6 点时可晚安，上午 6 点至 12 点可早安/我的作息、/群友作息查看自己和其他人的打卡记录词云根据记录到的消息生成词云图。用法/今日词云、/昨日词云、/历史词云天气查询使用和风天气 API 查询天气。用法地点+天气或天气+地点因使用了模糊关键词匹配，该功能为关键词触发，不需要前置斜杠。一言抽取一句一言（https://hitokoto.cn/）用法/一言抽卡支持游戏：明日方舟、原神、赛马娘、坎公骑冠剑、公主链接、碧蓝航线、FGO、阴阳师用法大概就是……/<游戏名><类别><数字><抽>例如：/方舟10抽或者/原神武器10抽 这样的完整的指令列表在下面，是正则表达式[collapse status="true" title="抽卡指令列表"]' .* ?方舟1-9|一{0,2}[抽|井]'' .* ?原神(武器|角色)?池?1-9|一{0,2}[抽|井]'' .* ?马娘卡?1-9|一{0,2}[抽|井]'' .* ?坎公骑冠剑武?器?1-9|一{0,2}[抽|井]'' .* ?(pcr|公主连结|公主连接|公主链接|公主焊接)1-9|一{0,2}[抽|井]'' .* ?碧蓝航?线?(轻型|重型|特型)池?1-9|一{0,2}[抽]'' .* ?fgo1-9|一{0,2}[抽]'' .* ?阴阳师1-9|一{0,2}[抽]'[/collapse]落子棋对局支持黑白棋、围棋、五子棋（均为只有两种棋子的落子棋）用法/黑白棋、/五子棋、/围棋——快速开启棋局/chess --rule <go/gomoku/othello> [--size <size>]——自定义棋局/落子 <position>——落子坐标/悔棋、/跳过回合、/查看棋局非常刷屏且扰民的功能，没事别动.jpg中国象棋、国际象棋对局用法/象棋人机、/国际象棋人机——开启人机对战可在命令后指定 AI 强度，如/象棋人机lv5，最高8级/象棋对战、/国际象棋对战——进行人人对战移动棋子使用坐标格式（如“e2h5”）；另外，对于中国象棋，可使用传统记谱法（如“炮二平五”）进行移动/…

安装并使用 caj2pdf 的傻瓜式指南
type: item
date: 2021-11-03T23:21:00+08:00
description: 作为文献大户专业，心理学需要阅读的文献量巨大。但众所周知，CAJViwer 这玩意的响应速度实在不行，而且处理文献十分不便。虽然其内置了导出 PDF 的功能，但是其导出的为没有大纲的纯图片 PDF。又不是不能用.jpg好在 Github 上有这样一个项目：caj2pdf。然而这并不是一个标准的 Python 包，我不能一个 pip install caj2pdf直接开跑，然后我又不会别的了。行吧，感谢 Eter 雪中送炭（所以，这是一篇傻瓜式指南，旨在给像我一样没有任何编程基础（其实还是有那么一点点）但是又需要用这玩意的同志提供帮助。0. 安装 Python这里就不讲了，参考：Python 3 环境搭建 | 菜鸟教程1. 下载 caj2pdf包在其 Github 项目页上下载其完整源码。该项目处于持续更新状态，所以其实可以考虑时不时回来更新一下。下载后解压，记住存放路径备用。2. 安装 mutool根据其指引文件，该程序需要 mutool 才能运行，因此前往下载：https://www.mupdf.com/downloads/index.html解压之后，记住存放路径备用。3. 安装 PyPDF2打开命令行，输入：pip3 install PyPDF2如果你 Python 装得没问题的话，这一步应该会成功。4. 设置环境变量根据指南，需要把 mutool 设置为 Python 运行的环境变量，以便程序调用。右键“此电脑”——属性——高级系统设置——环境变量，编辑如下键值：点击编辑，出现如下界面，点击新建，将 mutool 的路径填进去。5. 程序理论上能跑了打开命令行（CMD），cd 到你解压 caj2pdf的目录，然后运行：# 转换文件 python caj2pdf convert [CAJ文件的完整目录（包含输入文件名）] -o [你准备输出文件的目录（包含输出文件名）] # 从 CAJ 文件中提取大纲信息并添加至 PDF 文件 ## 遇到不支持的文件类型或 Bug 时，可用 CAJViewer 打印 PDF 文件，并用这条命令为其添加大纲 python caj2pdf outlines [CAJ文件的完整目录（包含输入文件名）] -o [你准备输出文件的目录（包含输出文件名）]拿我自己的举个例子：python caj2pdf convert D:\Documents\BNU\文献\中英字幕对中国英语专业大学生附带词汇习得影响的实证研究_马超.caj -o D:\Documents\BNU\文献\中英字幕对中国英语专业大学生附带词汇习得影响的实证研究_马超.pdf python caj2pdf outlines D:\Documents\BNU\文献\中英字幕对中国英语专业大学生附带词汇习得影响的实证研究_马超.caj -o D:\Documents\BNU\文献\中英字幕对中国英语专业大学生附带词汇习得影响的实证研究_马超.pdf一切正常的话，你的文件已经输出了。6. 善后这个运行方式说实话非常不优雅，显然不是为外行设计的（原计划自己写个批处理，但是我 CMD 语法早八百年忘干净了，正在我重新捡起来的过程中 Eter 给我发来了一段代码：这段代码有 bug，我不会修，不是很好用，大家还是自己手动算了（@echo off for /f tokens^=* %%i in ('where .:*.caj') do python [替换成caj2pdf路径] convert ^%%~dpi^%%~nxi -o %%~dpi^converted^\^%%~ni^.pdf for /f tokens^=* %%i in ('where .:*.caj') do python [替换成caj2pdf路径] outlines ^%%~dpi^%%~nxi -o %%~dpi^converted^\^%%~ni^.pdf把路径填进去，保存成一个 .bat文件，然后把这个脚本放进你有 CAJ 文件的目录里运行，高效快捷全自动。就是其实也不是很优雅（但是我水平就到这了（后记原作者本人表示，该软件仍然无法处理全部的 CAJ 文件，但是应付日常应该是够用了。总之就是这样，也没什么技术含量也没什么别的，纯属帮帮像我这种小白（DDL 越多越想摸鱼，十篇文献摘要还没写，然后我花了半个小时写了个这个，溜了（