掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4318|回复: 14

[教程] 重新打包Mdx/Mdd的一点偶得. [2016.07.08更新]

[复制链接]

该用户从未签到

发表于 2016-6-12 03:25:22 | 显示全部楼层 |阅读模式
本帖最后由 idict 于 2016-10-30 08:08 编辑 * x1 o  `' b$ ~1 y2 U
% g1 B* c: y3 S2 [
首先多谢各位的帖子, 和论坛前辈们的教学帖, 以及大神们分享的词典. 让人受益良多. 非常感谢. 也非常感谢以下要使用到的软件的作者们!, n8 d$ \4 F7 j# u1 V: V) `

+ a+ B' k  p( S% h3 M0 R愚人千虑偶有一得. 在重新打包Mdx/Mdd的过程中有点体会. (重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)- C* Y9 U1 E9 X: Z+ W! l
5 P$ f/ x. U2 j; ~. N
重新打包的目的是希望继续使用Mdict PC版(因Mp3文件不能发音; GoldenDict是很好, 也很庞大, 需要时间学习).& ^. q. m4 j1 r% A# `9 r1 i
GetDict.exe v2.6很好, 在转换后会将目录名合并到文件名当中(需要重建目录结构也是麻烦事). 只好使用Readmdict.py了.5 p) ]6 i' O" N4 |

: X' c: R& `6 X: r7 L# @安装Python之32位版本(64位版本在全部下载里可以找到), 使用Python 2.7.x版本(Python 3.5.x双击不能引用Tkinter[可以自行改为3.5之兼容名], 在命令行输入参数是没有问题的). 安装选项: 全选 (必须的, 不然要手动增加Python的路径到Path)& X2 H+ a( f0 N3 K- F' I6 ?
https://www.python.org/downloads/5 f* g# w. U5 F* ]4 e4 w" {

( H! h3 F  L, x$ `( x7 r' }, c/ @安装Python-lzo, 似乎这个不用安装也可以解压Mdd. 但XWang提到要安装. 就装上吧.
$ C/ @) R( o0 p, Y9 f9 f* w! ghttp://www.lfd.uci.edu/~gohlke/pythonlibs/#python-lzo; O+ Z* s/ F, K1 y$ }; ^
( T8 c! m. P$ F1 G+ y
下载32位2.7版的, 64位的不能安装(即使在64位Windows, 版本位数是依据所安装的Python版本位数): python_lzo-1.11-cp27-none-win32.whl
6 D! Y" b) l( X" c7 h  Q然后以[管理员](重要, 否则不能正常安装)打开命令行窗口cmd.exe. 输入: (文件的目录名, 换成所在的下载目录名, 我的下载目录名是: r:\downloads, [下同]. 输入whl必须是全名, 也不能改名, 否则会出错.)
3 |5 E: n7 F8 J5 o/ T
  1. pip install r:\downloads\python_lzo-1.11-cp27-none-win32.whl
复制代码
5 [" O7 c" }/ b# u; U0 s3 G- |
(如果pip提示要升级, 就按提示方式升级, 再安装也可)
2 M$ v1 }, @5 N" q0 P1 b
  1. python -m pip install --upgrade pip
复制代码

9 [  i, j$ T& t0 K/ Z  T) M4 r: F查看是否安装成功:
$ _( @8 J5 E' F, ]
  1. pip list
复制代码

& z. Z4 a" l  C9 L! {! I如果成功:
8 H0 l& M/ @8 X  [0 A2 ~2 ~4 \9 I+ T' m* w
$ s4 g: p/ b. o1 I" n+ d
下载Readmdict.py  l# ]) R! F3 ]4 N" n  r
https://bitbucket.org/xwang/mdict-analysis/downloads0 L9 K' @& w4 l& |
解压zip后可以直接双击运行 Readmdict.py 选择要解压的mdx, 相同名称的mdd会一并解压. [***重要步骤***]% @; f( k7 G0 W$ L3 W: F
就会生成相应的txt和data目录.
, Z* R6 y8 x$ O+ [* E; a5 l* d- ^- m' m+ E4 S7 O1 e
在解压一些Mdd时, 如果有目录名是Windows的系统保留字时, 就会出错(如OALD9, 如图Title):. o, ~  T: U4 v; ^! [- @

1 c7 ?6 T& x3 V" w6 n3 {/ Z$ U$ C/ g3 S) P5 q$ P
只好更改目录名称了.& d- C' g9 [6 G: c
打开Readmdict.py(不要用Windows自带的编辑器)
" e* Y: `- s, e1 T2 _% I3 R; H$ f在700-701行之间增加替换目录名称的代码: 必须注意缩进, 建议不要用Tab, 改为空格(这是Python的建议), 或在编辑器中选中: Tab转为空格; 4个空格为一个缩进.+ r3 n/ A  L8 F
插入的代码时对齐上一行的fname = ...) y/ N9 Q. n8 y& R. Z5 k, l
  1.                 win_key = '\\con\\'          # Windows系统保留字$ i5 Q4 e$ c$ \+ M8 j( `
  2.                 if fname.find(win_key) >= 0:: [. u. ^* M5 T6 o0 }
  3.                     win_key_sub = '\\con_win\\'         # 替换的非保留字! ?  r* _& m; B
  4.                     fname = fname.replace(win_key, win_key_sub)         # 更换原字符串
复制代码
5 L- y3 t' o( @% |7 J
这样目录名: con 就会变成: con_win (其他的关键字没有作处理, 有一个改一个而已, 因为水平啊); d' V1 ]3 }4 ?* D5 _0 H
相应地, 在Mdx的txt文件就必须要改替换: /con/ 为: /con_win/ [***重要步骤***]
9 S, F/ I; R- L, z$ e7 O3 I附件中Readmdict_mod.py是增加后的py文件.
. _. Q  O  ?5 S3 O
1 j/ }" h+ s( N3 H5 T5 x0 O接下来就是转换Mp3为Spx了. (附件中lame.exe v3.99.5, speexenc.exe v1.2beta2)
, P/ D3 ^+ {% {0 e7 [; `6 c在转换spx之前必须将mp3转换为wav, 建议使用Lame.exe
7 V% g) N  Q: n1 hhttp://www.rarewares.org/mp3-lame-bundle.php
* R+ @1 X( t. ?
( y; l, v) Q- z; [: r再将wav转spx, 但这个speexenc.exe的1.2beta1.3并不兼容Win 7之后的系统. (或MdxBuilder里带的speexenc.exe都不兼容), a9 r8 D' t( E) r9 y2 K# Z# ~" _  i
http://www.speex.org/downloads/7 u& ^/ ?) x+ [/ f( X* W) y

% ?1 O3 {/ L9 d) V+ X, c( g所以就要找其他的版本. 附件中是1.2beta2可以兼容(取自于Audio Transcoder, 这个软件在转换过程中很吃内存. 一下子就吃光了[在安装时会有附加软件]. speexdrop很好, 但不支持目录)
- v/ Z/ Q/ o4 g这个是MSVC9, 微软的编译器. 兼容. (虽然写是1.2rc1, 但实质上是1.2beta3)
/ I6 ^- u) [* @* ahttp://www.rarewares.org/others.php#speex-unstable-win; [" y+ h* @9 c) a/ Q9 q+ e0 v7 F6 C
/ |" R; G2 v$ T# l$ w
现在要考虑的是:
' g% y. l/ P6 f3 tspeexenc.exe对采样率8/16/32kHz有优化. 而且mp3的采样率通常是16/22.05/44.1kHz, 不在同一采样率上.& h( K( q, c2 B
如果重新采样, 会增加转码时间. 如果不重新采样, speexenc.exe在转码时的编码率会不尽相同. 转换后文件大小也不尽相同. 通常变大多1/3-1倍.
5 R0 D& C6 u# ^. V所以选择重新采样, 这样可以用时间弥补质量上和文件大小的差别. 于量尝试写批处理.
, ]" E6 b) `. S+ j  N
  1. :: convert mp3 to spx' \& q8 M4 Y) j- X3 O1 i
  2. @echo off
    4 i# L. A  P  x# V5 T
  3. color 3f3 T2 {3 U+ Z2 {
  4. cls
    5 Q6 }: w, r& x2 a) m

  5. # q8 B+ w; `  z" c5 ]5 U. e
  6. ; _# p' c2 w* M" W, t; M
  7. :~begin
      l; Y% S* S8 E) F' `
  8. :: mp3所在的文件夹全路径名/ y6 B. |: A9 z
  9. set _folder=r:\downloads\data
    0 R5 N/ ?/ K) ]$ P1 ?& |/ z% g
  10. if not exist "%_folder%" (
    0 s- ~1 k* c4 p! _- e( f9 r
  11. echo. %_folder% 文件夹不存在.4 o- x" b; H% s/ W' I
  12. goto :~end)
    9 T! N( a2 [+ o; i8 T' w* r. M

  13. , L2 ]' _8 ^8 r/ n$ i0 _) j
  14. for /f "delims=" %%i in ('dir /b /s "%_folder%\*.mp3"') do (
    1 p$ R- u- T. j2 p" }; X+ A
  15. echo. %%~fi
    1 i; E1 e) w, o4 d: {' c
  16. lame.exe --silent -b 32 -m j -h --resample 32 "%%~fi" "%%~dpni_new.mp3"
    3 r1 z. F; k4 T' {
  17. del "%%~fi"0 A( `' n* w: S+ o
  18. lame.exe --silent --decode "%%~dpni_new.mp3" "%%~dpni.wav"  W) Z3 o5 B+ [/ `0 M( a, m, E( h$ ^
  19. del "%%~dpni_new.mp3"2 P. @1 W5 p& C* X, ?6 S3 {
  20. speexenc.exe -u --bitrate 24000 "%%~dpni.wav" "%%~dpni.spx"
    " A, O% g7 \9 D: C2 G: _' k% w
  21. del "%%~dpni.wav"# _& e7 ]1 m* [( \0 }
  22. )
    3 L8 h& a: Z4 H- N. b5 `: A+ Y) o
  23. ; H1 d3 e* n# w- Y
  24. % \- M& Z! B4 F! `+ }
  25. :~end
复制代码
5 \4 J& h3 f1 i3 R5 g
第9行是mp3所在目录名. (我的是: r:\downloads\data)/ d9 d7 l1 \# t! i' Q
第16行是用Lame.exe对mp3重新采样. 参数: -b 32 是编码率: 32kbps,  参数: --resample 32 是采样率: 32kHz. 如果Mdd里mp3是24kbps, 11kHz的质量不算好(如果相同参数转为spx就质量损失很大). 质量好是22kbps, 22.05kHz.: ^& H# ~( P% g" r2 e, ~2 y0 k
第18行是用Lame.exe对mp3解码为wav.1 T! T0 a2 S1 }5 q, Q- ]
第20行是用Speexenc.exe对wav重新编码压缩为spx. 参数: -u 是32kHz采样率优化, 参数: --bitrate 24000 是编码率. 可对应原mp3的码率而定. 如果原来mp3是24kbps, 22.05kHz, 经重新编码为24kbps, 32kHz的spx文件大小大致上没有变化. 而且保持相当质量./ R5 x( o# Z7 v
第17/19/21行是删除mp3/wav文件. 所以必要备份数据.# G" Z8 h9 Z" q7 @
1 ]2 h7 @( b7 V& ]1 k6 I+ H1 g  q
然后打开cmd.exe命令行窗口运行批处理. [***重要步骤***]
: r" a+ M$ j: p3 F$ o# ^$ F; F0 F附件中convert2spx.cmd1 T7 {8 S5 a/ E8 g5 e

* U: I4 s3 z2 c- c7 ?# v这个批处理可转换目录结构里的mp3. 但没有排错的功能. 所以不能用Ctrl-C中断. 如果中断了, 可能会增加重新采样的新文件如: *_new.mp3/wav/spx等文件. 就会发生文件数量不一致了.
$ Z5 H; c# C* l" {) n' E如果mp3文件是128kbps, 44.1kHz的话, spx最好也是32kHz采样率. 至于编码率32kbps的质量也是很优秀的了, 文件大小也很优秀, 毕竟speex是针对语音优化压缩的. 或许是使用ogg格式编码的. 应该比mp3格式好吧. (重新采样时, 相应将编码率改为128kbps: -b 128)3 ?4 c  _( H; Y
转码时间是很漫长的, 15万个mp3文件可能要8个小时, 看机器的情况. 完成转码后吃不到1GB内存, 或者更少吧.+ c3 [; u( j0 s" f% l) K( [$ v! B) s
完成转码后, 再次核对文件数量是否一致. 到目前为止, 还没有不一致的情况. 还好.
8 M: S$ @+ P5 }5 ?; A# _8 V2 z; I4 T- q3 m+ F7 k1 J- f) [" d
相应地, 在Mdx的txt文件就必须要改替换: .mp3 为: .spx [***重要步骤***]' c% @; e, z5 P' D: H" n: n3 w
如果一致就可以用MdxBuilder直接重新打包了. 通常都将css和js放在data目录下一起打包为mdd. 以免丢掉了.
8 Q% `# d& P( {1 S$ t& K0 [5 _) s
这样就可以在Mdict PC也使用. 目前也有一些js不能正常运行的. 因水平有限就不知道是什么原因了.
6 A2 I, H8 @9 A
) ~8 I9 x! d, X+ x
8 m; z8 ?) W! P/ H& q2 ^但就不会出现不能播放的问题了.
' I! K& H8 ]* a# _( Q4 T
: z: {( @/ M3 J5 N
" ^* ?3 B6 e2 x( o6 J0 M* h再次多谢各位! 谢谢.
7 P1 a: w. \2 d$ p; h7 [(再次重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)
7 O' t+ J2 J* R  Z( @
9 C9 g. K( m7 u7 @; x) s$ R/ m% N8 @) y- d" o  {
(如需要, 请下载下面更新的附件[适用全部的关键字和关键字符{除\外}])- w3 n* ?+ L9 }5 `, E
* u% H1 j* g9 D8 M; z

' [" ]8 M& w% N5 M
! L: v* X1 a- N* }
* G" q$ I! a# _$ Y1 y  ], Z3 Q& N7 l
2016.07.08更新) j2 ^+ a$ \2 [* j! e% Z4 n" _. z

1 d/ v: Y( c. ~) h) z+ ?经过漫长的摸索, 终于对Python有点了一丁丁点的了解. 并转到了Python 3.5.x, y1 U; [  X$ j: V8 j9 C- g' u; R  A0 x
查看了有关Windows的关键字和关键字符. (谢谢asicsfree, PurlingNayuki的信息)5 E/ f( r5 ~  g5 }
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
! M# c8 C7 n- R; a, f$ J6 V5 b7 G9 C0 `5 @, z
The following reserved characters:& {  o: H5 i5 i2 a2 n% M5 K8 a
    < (less than)" H2 @! L8 M7 N2 p
    > (greater than)
% u! Y' V+ I3 i; ^    : (colon)3 x  h9 n( _- A+ s# `& c
    " (double quote)# |- P, F" z! b& T
    / (forward slash)
$ R) u' ]9 p) }3 d7 s$ O+ Y' Q    \ (backslash); t) s- A+ \% E) D0 t
    | (vertical bar or pipe)# M6 C, R3 m! h
    ? (question mark)
  @7 {/ f+ `2 P    * (asterisk)
Do not use the following reserved names for the name of a file:
0 Y) }$ [/ B: Q0 w* w/ u8 `CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.

2 i5 S" Q- M/ d8 n8 F3 S' O2 D% [所以重新整理了一下Windows下的文件名/文件夹名称的问题.: O# Z0 t* v# L" t0 L+ c: x0 o9 d
首先是readmdict.py在Python 3下不能导入Tkinter, 原来是改了名字为: tkinter  y' R4 _: r- n' `. {. l
因此将634-638行换成: (以下全部都要注意缩进)* V0 ~' m! @6 `- e1 W8 L5 W
  1.         from tkinter import filedialog
    * G. U2 ^3 w' }) b
  2.         from tkinter import *, h" O. o2 D% ~$ c2 ]$ g2 o
  3.         root = Tk()) _6 i- c4 W7 C3 \& q' V
  4.         root.withdraw()
    , n* @; k2 d$ ^+ a+ h5 c1 ?2 R, K
  5.         args.filename = filedialog.askopenfilename(initialdir = os.path.abspath('..'), title = "Select a mdx/mdd file:", filetypes = (("mdx/mdd files", "*.mdx *.mdd"), ("all files", "*.*")))
复制代码
. M' l5 g. u: [2 y* T4 S% a
至于关键字和关键字符.9 m  i. m/ n+ Z, {# u9 m
在第696-697行插入:4 @/ g6 N9 j0 N; ]8 M7 G/ B
  1.             win_chr = re.compile(r'(<|>|:|"|\/|\||\?|\*)')      # Windows系统保留字符) q5 K2 c  z: v+ r' R/ h! d
  2.             win_key = re.compile(r'\\(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])\\', re.I)      # Windows系统保留字
复制代码
+ q- D' s- D$ D: U  W
在第703-704行插入:2 G/ |7 ~/ I8 d! K9 ?
  1.                 re_obj = re.search(win_chr, fname)
    : q; p( d  B+ b! o! H0 S/ V
  2.                 if re_obj:
    1 S2 c# P1 S1 A0 R0 J% X8 T
  3.                     fname = re.sub(win_chr, r'_', fname)        # 更换保留字符为: _
    + ?2 o; U: O+ B6 d
  4.                     print(r'___ substituted "_" for "%s" ___ %s' % (re_obj.group(), fname))
    2 S% }4 i3 C1 g0 I6 H( N* |& q
  5.                 re_obj = re.search(win_key, fname)! u' u0 P  D, c; x5 h, V; P
  6.                 if re_obj:/ p# z, ^2 u5 a$ s# [
  7.                     fname = re.sub(win_key, r'\\\1_win\\', fname)     # 更换保留字为: *_win5 \% [- [1 g/ z" H* F/ r
  8.                     print(r'+++ substituted "\%s_win" for "%s"' % (re_obj.group().replace('\\', ''), re_obj.group()))
复制代码
1 O3 a: R, a; w( M
建议打开命令行窗口运行文件. 这样可以用手抄下更改了的文件夹名和文件名(假如是有的话, 会显示).
! }7 l2 P; y! Q" N1 \& f" \( c" r5 [0 q: N
见附件中的readmdict3_mod.py
. T" t, b# B# C: h4 E$ L& j- ], {而readmdict2_mod.py是Python 2.7.x适用.
& Z" f" P+ _# i, W; ]% |+ \
( m. L3 x! e% ]* K6 u6 Z- D另外, 由于mp3转spx是极耗时间的事(而且还重新采样[目的是保证spx的品质], 更多耗了一些时间. 于是尝试学习使用Python 3.5.x多线程调用外部命令, 以提高转换效能.
& M# I4 u" m8 r( Z3 v2 c+ k由于是新手, 始终都没有办法了解到调用Popen()后何时才能知道外部命令完成的信息. 如果使用communicate()或wait()的话, 好像与单线程一样, 要完成了才执行一下个指令, 与call()无区别. 即使已经开了多线程, 情况没有什么改善.  H; ~& I8 L6 ^
所以就使用呆呆法(还请不吝赐教. 谢谢.): 一次转换使用一次循环. 因此三次转换就用了三次循环, 还是采用Popen(). 这样效能还是很高的. 线程数取于CPU核心数目. 这时CPU的占时可是100%全速开转.
6 H( S9 v, G1 o. B手提电脑要谨用. 不然的话, 风扇是极速狂转的. 很热很热的. (所以用dos转换就悠悠的. 反正晚上开转, 第二天早上基本就转好了.)
+ |2 i: `# X9 e0 P4 G测试了一下, 线程数可以根据需要修改. 分别选1/2, 1, 2倍于CPU核心数目, 但等于核心时的耗时最少, 效能最好. 至于内存的情况, 呈浪涌形, 吃了5/600MB, 之后会释放掉. 情况良好.4 Y. @6 h! _5 [8 m; ~
无论是用dos转, 还是用Python转, 都会删除原mp3文件的. 所以必须做好数据的备份.9 _* m' i8 l3 `1 O! Y2 {
见附件的convert2spx.py适用于Python 3.5.x for Windows (没有做出错保护的功能, 也没有纠错能力. 在正常情况可以正常使用而已).
. b) a0 \% C4 G! t7 h( k
# C1 S3 C( E+ b  z' {" F  h+ ~* }) H4 G. l6 J8 @% s/ o4 x. Z

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

本帖被以下淘专辑推荐:

  • · Python|主题: 10, 订阅: 5
  • TA的每日心情
    开心
    2018-8-15 07:35
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    发表于 2016-6-12 07:35:23 | 显示全部楼层
    楼主大才,那个保留字的问题困扰我很久了。非常感谢。

    该用户从未签到

    发表于 2016-6-12 20:27:44 | 显示全部楼层
    保留字好像有 ( r6 x, ~  @( |+ c
    ; G: n! Z+ v! H0 F8 |) M( l
       CON   COM1 - COM4
    / q" c1 r5 R0 e8 W( q5 P   PRN   AUX    LPT1
    " V% \+ I) X6 a# ~$ h) i# @                               
    * A8 N6 U5 |3 m
    " c- o) N0 Y/ x/ ~https://goo.gl/gQ90qV

    该用户从未签到

    发表于 2016-6-12 20:44:38 | 显示全部楼层
    PC 上的話,GoldenDict 不知為何要「重新學習」?我覺得一切都很直覺。lzo 什麼的,應該 pip 可以直接線上安裝。

    该用户从未签到

     楼主| 发表于 2016-6-15 11:24:48 | 显示全部楼层
    本帖最后由 idict 于 2016-6-15 11:26 编辑 ( w  T3 b  N6 l! B$ Z( l: t  N1 N
    lzo 什麼的,應該 pip 可以直接線上安裝。
    5 A6 F  U/ v9 T# r# S

    ( S5 Y# z. e0 G$ b; K$ S在线安装python-lzo会出错, 下载官方安装包打开setup.py安装也出错. 实在是水平有限, 没有办法排错. 幸好还可以找到whl编译版. 可以装上. (好像不安装也可以解压. 但readmict.py会检查, 装上求正常)
    1 u. E$ J& \8 p. o% _: i. S第一次使用Python, 需要了解的东西实在是太多了.

    该用户从未签到

     楼主| 发表于 2016-6-28 12:24:47 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 01:08 编辑 8 }' n: s6 ]! A5 S' {3 B2 {
    7 G" O8 T. P9 ^* V, h2 b/ y
    关于Python/Windows平台pip安装的情况, 有些是可以直接安装的, 比如BeautifulSoup, 因为是直接用Python写的. 不需要用到C编译器. 如果安装lxml就需要安装C编译器. 这可多工作量了.
      g& k" L/ [) E! \  G! h版本兼容:" K2 B0 }3 M3 Y6 t4 h& @/ Q8 ]) |
    https://wiki.python.org/moin/WindowsCompilers/ l* z5 j. c4 \/ h2 R6 r& p7 r
    如果是Python 2.7
      I  b% q1 I+ B# \5 Phttps://www.microsoft.com/en-us/download/details.aspx?id=44266; x9 h" R, t: C' {4 m
    如果是Python 3.5( l) W- m, s2 P0 x% d) _
    http://landinghub.visualstudio.com/visual-cpp-build-tools1 y5 q) }" _9 ~1 ^1 @3 J
    也可以用MinGW (x86)的. (不知道兼容性如何)/ Q* K. l, O, \7 V; \5 B
    https://sourceforge.net/projects/mingw/files/1 E* f3 v8 g& G4 [; u) b0 r# t

    : m" F6 z6 z/ F, N+ v; F7 b折腾了好几天, 最后还是选用别人编译好的whl版直接简单方便快捷.
    3 t! [3 @! d$ q" n" n6 ^1 p因为MSVC14下载要4GB, 安装完要6GB, 编译过程还有一堆问题在. 版本的兼容, 头都大了. 当然是自己的能力有限的问题了.5 @4 B: o$ t% b; v2 a; e+ e3 e
    还是伸手的方便啊. 虽然是非官方的.
    - Y0 \( n* X& q$ V; x9 ?http://www.lfd.uci.edu/~gohlke/pythonlibs/
    9 r+ D1 K5 m! S9 c) _# C; G" ^
    8 d) D8 h/ Q0 V3 x/ {相应找到版本下载直接安装就可以了. (lxml也有的)+ d0 Y* D  o/ }
    比如安装了64位的Python3.5, 下载3.5/64位cp35*amd64.whl文件.; ?& o$ k; `. {, U
    如果是安装了32位的Python3.5, 就下载3.5/32位的cp35*win32.whl文件.
    - P, Q7 r3 t' ?4 [如果是安装了64位Python2.7, 就找cp27*amd64.whl文件. 32位就相对应为cp27*win32.whl文件.
    ' h* R3 V* Z% W$ ?即不是依操作系统的版本, 而是根据所安装Python的版本来下载whl文件来安装.
    6 t" ^3 H  z. d; n  O) d才几十KB到几MB. 不装6GB的MSVC14了.2 q9 C4 B& B; U! }7 d4 K% y
    4 P7 x, I( Y* W( s. a0 O- p
    非常谢谢.3 a. }8 u/ ?6 Q) |; `/ U3 N- i

    该用户从未签到

    发表于 2016-6-28 22:08:59 | 显示全部楼层
    本帖最后由 asicsfree 于 2016-6-28 22:46 编辑
    # x9 c0 k2 M8 e% A" d; ]
    7 I$ ]4 S6 S, I, Z  J3 P請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?! |5 l$ v* O& \$ z) z$ z, h
    我想要測試一下。

    该用户从未签到

     楼主| 发表于 2016-6-28 22:53:39 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 03:39 编辑
    % |8 H3 |- ^  v  C! t4 W. \
    asicsfree 发表于 2016-6-28 22:08/ {" g+ `* a. H
    請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?謝謝。
    : W4 B9 \, I, U
    " {! k% E) C' L) i& p' h  v* t
    不客气. 目前刚巧偶遇一个:9 h0 H3 A+ n) x/ u. g& \' |- H( x! L
    是Amazon的OALD9简约风格.% k# ]$ I" A9 ]4 o
    https://www.pdawiki.com/forum/fo ... hread&tid=16587$ ]% s  X  H, i7 Y2 b2 l
    2 ?/ x5 C* f. q4 ^
    一并感谢Amazon, keenper的大作.+ x/ K! V8 q6 h/ O; B6 ^

    该用户从未签到

    发表于 2016-6-28 23:40:49 | 显示全部楼层
    idict 发表于 2016-6-28 22:534 T# w( @; _2 f; D! x7 B- J' l6 Z
    不客气. 目前刚巧偶遇一个:  G; K( U- o  q: V3 X
    是Amazon的OALD9简约风格.( F3 L) {+ Q/ Z1 Z. U- T
    https://www.pdawiki.com/forum/forum.php?mod=vi ...
    5 w5 ?5 m% `1 t* ]4 f3 ~0 W$ d
    感激,快來試試。

    该用户从未签到

    发表于 2016-6-28 23:45:12 | 显示全部楼层
    asicsfree 发表于 2016-6-28 22:08
    ( W8 h$ p& y0 K# q請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?
      U/ j4 F! @" [* k1 [9 D5 S我想要測試一下。
    ; X1 f( A, m+ a( Q
    Windows 有一個保留字:aux
    0 h2 a5 L6 j4 c# l2 _( h, v這個讓不少詞典的中招了,因為是一個常用縮寫。

    该用户从未签到

    发表于 2016-6-29 02:24:27 | 显示全部楼层
    PurlingNayuki 发表于 2016-6-28 23:45
      L9 `1 f" O: V! T3 Z: MWindows 有一個保留字:aux
    + G( P6 @2 _) l- x這個讓不少詞典的中招了,因為是一個常用縮寫。
    5 h, Z/ d4 J+ l: A
    可以介紹是哪一個mdd嗎?謝謝

    该用户从未签到

    发表于 2016-6-29 02:47:38 | 显示全部楼层
    asicsfree 发表于 2016-6-29 02:24
    / i% @% @: f: G5 Y可以介紹是哪一個mdd嗎?謝謝
    - f1 [) U/ Y4 `3 Q5 _8 p
    抱歉,具體不是很清楚了。首先很少打包及解包,其次我通常使用 Python 實現的 readmdict 在 OS X 下工作。$ b) g+ b" W1 t) ^* E  e' j, y0 A7 S
    不過如果真的想玩的話,大可以自行制作一個嘛。
  • TA的每日心情
    慵懒
    2018-10-24 13:08
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2017-5-12 10:04:52 | 显示全部楼层
    好难的样子啊
  • TA的每日心情
    擦汗
    前天 15:06
  • 签到天数: 504 天

    [LV.9]以坛为家II

    发表于 2020-11-10 17:39:29 | 显示全部楼层
    感谢楼主,非常有用
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-4-27 05:13 , Processed in 0.053295 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表