掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4306|回复: 14

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

[复制链接]

该用户从未签到

发表于 2016-6-12 03:25:22 | 显示全部楼层 |阅读模式
本帖最后由 idict 于 2016-10-30 08:08 编辑 7 c  L4 b0 A7 S+ i& ^  J7 A
( U6 G4 T4 A2 y, s) M
首先多谢各位的帖子, 和论坛前辈们的教学帖, 以及大神们分享的词典. 让人受益良多. 非常感谢. 也非常感谢以下要使用到的软件的作者们!- }$ J3 i4 {7 r0 h/ N& @7 h
0 r* ^, M- l, K& a" p
愚人千虑偶有一得. 在重新打包Mdx/Mdd的过程中有点体会. (重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)& @% m. c  x$ W

( Q& _1 m- Q% O重新打包的目的是希望继续使用Mdict PC版(因Mp3文件不能发音; GoldenDict是很好, 也很庞大, 需要时间学习).
: `5 f! Q; y3 ]3 ]' wGetDict.exe v2.6很好, 在转换后会将目录名合并到文件名当中(需要重建目录结构也是麻烦事). 只好使用Readmdict.py了." z+ \3 b* d3 F% A4 r2 P' K% @

1 }$ L. C/ z0 Z8 H0 q5 Y7 F1 _安装Python之32位版本(64位版本在全部下载里可以找到), 使用Python 2.7.x版本(Python 3.5.x双击不能引用Tkinter[可以自行改为3.5之兼容名], 在命令行输入参数是没有问题的). 安装选项: 全选 (必须的, 不然要手动增加Python的路径到Path)
. @: X% x* M; g+ h; ]# U+ {https://www.python.org/downloads/% S) G7 B% z3 p: ^3 e% l

3 o2 `' i1 F) }; X: _0 i- n5 J安装Python-lzo, 似乎这个不用安装也可以解压Mdd. 但XWang提到要安装. 就装上吧.
- t$ ~5 R! ]3 a: H4 I4 uhttp://www.lfd.uci.edu/~gohlke/pythonlibs/#python-lzo
" w4 d( i% p  Z" b% V0 ]% C4 o8 g8 ~
' y5 R2 l# K# Z5 X3 C9 H4 w下载32位2.7版的, 64位的不能安装(即使在64位Windows, 版本位数是依据所安装的Python版本位数): python_lzo-1.11-cp27-none-win32.whl5 x$ G) E+ g+ \9 N  e
然后以[管理员](重要, 否则不能正常安装)打开命令行窗口cmd.exe. 输入: (文件的目录名, 换成所在的下载目录名, 我的下载目录名是: r:\downloads, [下同]. 输入whl必须是全名, 也不能改名, 否则会出错.)8 v8 i7 V  k# P. m9 ~: G
  1. pip install r:\downloads\python_lzo-1.11-cp27-none-win32.whl
复制代码
$ D- f- c# Y, X2 p* p
(如果pip提示要升级, 就按提示方式升级, 再安装也可)
* A- v( I0 d2 M
  1. python -m pip install --upgrade pip
复制代码

  t1 j  u; j4 ]5 r/ j- y查看是否安装成功:
5 I/ L) F1 `1 G0 V! C2 H5 D. L
  1. pip list
复制代码

5 h5 ~  _1 e  ~5 ?8 }如果成功:
6 N5 V. k. F* h1 d, C+ r8 i' d
: `# F$ a& q/ {0 W# u2 J. D/ w% {$ |1 O- q% k2 y% o8 P3 _
下载Readmdict.py! F6 J- J9 q2 ]
https://bitbucket.org/xwang/mdict-analysis/downloads
. c3 v7 }) Z; W解压zip后可以直接双击运行 Readmdict.py 选择要解压的mdx, 相同名称的mdd会一并解压. [***重要步骤***]* c# Q# [( I6 z7 N# L
就会生成相应的txt和data目录.# U! B# m1 s5 J5 Y4 N

7 F  R! k: |4 M  \) @: C在解压一些Mdd时, 如果有目录名是Windows的系统保留字时, 就会出错(如OALD9, 如图Title):
% e+ S6 o; [, L* i8 V8 Y+ O/ O: u; z3 m" v6 S" l- a

% @2 d) v# `/ [4 g, h# R" a8 ^只好更改目录名称了., E6 j# ]$ i9 u% ^8 o. u" @: F
打开Readmdict.py(不要用Windows自带的编辑器)3 Z7 }! ^- C. x; [9 f5 O
在700-701行之间增加替换目录名称的代码: 必须注意缩进, 建议不要用Tab, 改为空格(这是Python的建议), 或在编辑器中选中: Tab转为空格; 4个空格为一个缩进.
; t0 e5 X2 `: E( Q插入的代码时对齐上一行的fname = ...
- g0 ?9 ~0 R4 {" U
  1.                 win_key = '\\con\\'          # Windows系统保留字
    . R  C; S$ S7 ?/ ^/ h& T! ~) d
  2.                 if fname.find(win_key) >= 0:) `9 Q& w! B0 Q; v
  3.                     win_key_sub = '\\con_win\\'         # 替换的非保留字
    ( l' F7 \& A0 r+ H# D! C
  4.                     fname = fname.replace(win_key, win_key_sub)         # 更换原字符串
复制代码
9 @4 O7 w; I7 c; R0 V8 X1 A- y
这样目录名: con 就会变成: con_win (其他的关键字没有作处理, 有一个改一个而已, 因为水平啊)' c& N! Q, U/ b  b
相应地, 在Mdx的txt文件就必须要改替换: /con/ 为: /con_win/ [***重要步骤***]6 K" p2 s+ F1 B' y0 s
附件中Readmdict_mod.py是增加后的py文件.' e/ m* ]7 M, d3 v: o
6 n* P& n, K0 p9 V- `
接下来就是转换Mp3为Spx了. (附件中lame.exe v3.99.5, speexenc.exe v1.2beta2); Y6 O) ?3 y+ e7 I9 k5 n
在转换spx之前必须将mp3转换为wav, 建议使用Lame.exe
% V+ }8 i8 T, m5 J  f+ o- C  Dhttp://www.rarewares.org/mp3-lame-bundle.php7 Y7 y- Y9 q% d, E6 Z& c
- p, V/ V- _9 k; ?$ z( ?
再将wav转spx, 但这个speexenc.exe的1.2beta1.3并不兼容Win 7之后的系统. (或MdxBuilder里带的speexenc.exe都不兼容)1 N3 v5 [4 \8 l0 u# {1 o
http://www.speex.org/downloads/+ V+ E" t. h$ M! \% ^
( ^% F+ [7 G' L7 F: O! {- _6 U% o
所以就要找其他的版本. 附件中是1.2beta2可以兼容(取自于Audio Transcoder, 这个软件在转换过程中很吃内存. 一下子就吃光了[在安装时会有附加软件]. speexdrop很好, 但不支持目录)
: J6 y- L( \: G3 ?这个是MSVC9, 微软的编译器. 兼容. (虽然写是1.2rc1, 但实质上是1.2beta3)
& u5 h  V" o, y8 a6 T8 {http://www.rarewares.org/others.php#speex-unstable-win; m! B* a/ b- u, K

9 W+ o, O, {" ^) T1 i现在要考虑的是:
' @* b7 c1 G8 p' S( l3 v9 s+ qspeexenc.exe对采样率8/16/32kHz有优化. 而且mp3的采样率通常是16/22.05/44.1kHz, 不在同一采样率上.+ G* i' y  Y7 N8 F" ]$ h7 f
如果重新采样, 会增加转码时间. 如果不重新采样, speexenc.exe在转码时的编码率会不尽相同. 转换后文件大小也不尽相同. 通常变大多1/3-1倍.
; ^3 X( s# }" Q所以选择重新采样, 这样可以用时间弥补质量上和文件大小的差别. 于量尝试写批处理.
! H+ l7 |. Z, C, z0 L8 p3 D+ e# s. t
  1. :: convert mp3 to spx
    + \9 K$ U! G4 [6 k
  2. @echo off
    ( E+ R7 ^6 ^2 t$ o% s5 g
  3. color 3f
    . Z9 W  j+ _3 L# }/ j
  4. cls: `3 B! G  ^7 |3 q' q, e6 S

  5. " X5 T. x& `) A, ~& X: |) d
  6. 4 N( t1 n( E) Y
  7. :~begin, @( U: ~, V1 p: @* i
  8. :: mp3所在的文件夹全路径名
    + V6 K4 g! l" H" V+ H9 i
  9. set _folder=r:\downloads\data
      Y* o2 j; A8 E+ h3 a
  10. if not exist "%_folder%" () h' W  I0 d8 ?
  11. echo. %_folder% 文件夹不存在.
    * z; L+ A6 m4 P' ^. E, b1 R
  12. goto :~end)( P# q/ p& ]3 k

  13. 3 v/ `3 W+ e4 d8 c2 Y- s- Z* U
  14. for /f "delims=" %%i in ('dir /b /s "%_folder%\*.mp3"') do (+ x' Z7 q) c; A4 c) u
  15. echo. %%~fi
    # x3 p7 ^1 \* g. J  C8 o9 `0 X, W
  16. lame.exe --silent -b 32 -m j -h --resample 32 "%%~fi" "%%~dpni_new.mp3"
    6 r' o0 A7 d1 ?, d% }$ b. l; z
  17. del "%%~fi"
    # @' A" V1 s/ t3 h( N6 T
  18. lame.exe --silent --decode "%%~dpni_new.mp3" "%%~dpni.wav"
      w8 l- P5 U. Q
  19. del "%%~dpni_new.mp3"( N; m) A+ Q" q' A. ?2 t# ~9 q
  20. speexenc.exe -u --bitrate 24000 "%%~dpni.wav" "%%~dpni.spx"
    % K1 E6 y, F$ {# k: s
  21. del "%%~dpni.wav"
    9 ?+ i9 N1 m; I' R7 q3 T
  22. )5 I+ l; G" }( J2 X1 \% p8 ^' z
  23. 4 R2 S- f8 w6 d% x8 r' t+ C2 a

  24. 1 K) {1 n; P3 T$ v" f" U4 Q! e
  25. :~end
复制代码

+ U3 y6 d9 l  l+ W2 ^- y/ m& H4 b第9行是mp3所在目录名. (我的是: r:\downloads\data)
, t/ o$ w- ^8 C5 u第16行是用Lame.exe对mp3重新采样. 参数: -b 32 是编码率: 32kbps,  参数: --resample 32 是采样率: 32kHz. 如果Mdd里mp3是24kbps, 11kHz的质量不算好(如果相同参数转为spx就质量损失很大). 质量好是22kbps, 22.05kHz./ @, ^( ^  |  l4 X
第18行是用Lame.exe对mp3解码为wav.3 J8 U- {5 B! @6 t4 f
第20行是用Speexenc.exe对wav重新编码压缩为spx. 参数: -u 是32kHz采样率优化, 参数: --bitrate 24000 是编码率. 可对应原mp3的码率而定. 如果原来mp3是24kbps, 22.05kHz, 经重新编码为24kbps, 32kHz的spx文件大小大致上没有变化. 而且保持相当质量.
1 a1 L) H' ?; a7 {; K第17/19/21行是删除mp3/wav文件. 所以必要备份数据.
; Q7 @6 {$ B* h) p' v
' @: J7 t$ U; S- O, |+ c然后打开cmd.exe命令行窗口运行批处理. [***重要步骤***]( p& a7 J# S& j* T# ]8 ~) a
附件中convert2spx.cmd
% O$ X) @$ s+ ]2 ]6 d1 e0 G! K. \1 \9 V/ t; D  S
这个批处理可转换目录结构里的mp3. 但没有排错的功能. 所以不能用Ctrl-C中断. 如果中断了, 可能会增加重新采样的新文件如: *_new.mp3/wav/spx等文件. 就会发生文件数量不一致了.
" \  Y& U; x" z5 L3 `0 R如果mp3文件是128kbps, 44.1kHz的话, spx最好也是32kHz采样率. 至于编码率32kbps的质量也是很优秀的了, 文件大小也很优秀, 毕竟speex是针对语音优化压缩的. 或许是使用ogg格式编码的. 应该比mp3格式好吧. (重新采样时, 相应将编码率改为128kbps: -b 128)
3 ^1 K* ]& x. q0 i7 Y9 F  ]/ W4 v) E转码时间是很漫长的, 15万个mp3文件可能要8个小时, 看机器的情况. 完成转码后吃不到1GB内存, 或者更少吧.
% j. b! ^; d4 h; I9 k完成转码后, 再次核对文件数量是否一致. 到目前为止, 还没有不一致的情况. 还好.
) Q. z1 Z. I7 z7 l' W
! R& ]- m) Y" ?6 H& i8 g6 f相应地, 在Mdx的txt文件就必须要改替换: .mp3 为: .spx [***重要步骤***]
7 K. C! \. e9 d如果一致就可以用MdxBuilder直接重新打包了. 通常都将css和js放在data目录下一起打包为mdd. 以免丢掉了.3 c/ P6 f8 n7 R2 m3 y
1 f7 Z1 X. c8 ], k3 F  L1 y, R
这样就可以在Mdict PC也使用. 目前也有一些js不能正常运行的. 因水平有限就不知道是什么原因了.
6 M& c# h, Z+ g0 s4 C* V2 d* Y! b4 T$ p7 i" q. x

- D, d7 d8 `8 p9 Y/ s) F/ B但就不会出现不能播放的问题了.
8 h# `; d5 m) A" y' y7 I
9 k. i4 K: y2 O2 d" N7 J; N8 }$ T! u- a
& d/ ~7 ~: h. h8 r再次多谢各位! 谢谢.! t# E; j- }( ]# f9 J
(再次重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)
- b4 O& B" T) ^; s" m" s1 a; k% ]( n- m
1 C# h, f2 D7 B0 o4 [0 k/ S
(如需要, 请下载下面更新的附件[适用全部的关键字和关键字符{除\外}])
6 _" |& M8 O( T4 P& m9 a  z' _1 K& |! |

' \% q, H7 ^, }! z: X7 P9 \. P% x2 F- p4 h, O/ s
+ ]- k0 t8 W7 ]+ o/ f
: m5 j% o' i( Q3 T( T$ D2 f
2016.07.08更新4 r4 L) X- g3 m5 X* [( @( E" y( C
+ w) ~  i$ E; G: {( [5 u* t
经过漫长的摸索, 终于对Python有点了一丁丁点的了解. 并转到了Python 3.5.x
& w1 r% @0 h: n: L查看了有关Windows的关键字和关键字符. (谢谢asicsfree, PurlingNayuki的信息)
8 [8 X! \, }# ~; Yhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx7 R$ L( @: k3 \, i
& d% @% G% d/ E7 Y' e- I
The following reserved characters:: M- W. B/ A0 i2 a# ~  U9 E* s5 Z
    < (less than)
* V- s6 T. Y. O    > (greater than)) z2 N/ G2 Y# ?+ a! R4 \
    : (colon)% u6 z6 x% O, k4 ^: k
    " (double quote)
4 U0 [, C' `/ z# V3 y0 O; f    / (forward slash)
- s7 v' {" o( Q3 ]+ ^9 @0 F0 l; G4 ~    \ (backslash)) J( Q; {& \! R+ {! E+ |
    | (vertical bar or pipe)
- [( @# P. [9 m' b    ? (question mark)
/ n) X6 k1 A6 p8 m6 O( m8 q, O5 p% [    * (asterisk)
Do not use the following reserved names for the name of a file:+ H6 z) m& f* E, t' J7 J
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.

/ ]2 ?+ [. h1 M! y所以重新整理了一下Windows下的文件名/文件夹名称的问题.
3 q' w2 {6 {, k7 p' J3 S8 p: K( [# }首先是readmdict.py在Python 3下不能导入Tkinter, 原来是改了名字为: tkinter
. }- M7 N. W$ E$ }: |因此将634-638行换成: (以下全部都要注意缩进)! u6 U) w' s2 G5 o- F5 G
  1.         from tkinter import filedialog5 {$ [4 g2 x/ v3 A0 L7 W) r; N* K
  2.         from tkinter import *
    9 `' u6 @9 I; J2 v3 M3 K
  3.         root = Tk()' Y& J1 F/ g# j- ]+ ^+ e2 V' H0 A
  4.         root.withdraw()8 D: u  m/ l# z: B
  5.         args.filename = filedialog.askopenfilename(initialdir = os.path.abspath('..'), title = "Select a mdx/mdd file:", filetypes = (("mdx/mdd files", "*.mdx *.mdd"), ("all files", "*.*")))
复制代码

6 y! ]& r8 o  w7 d0 F# |' \至于关键字和关键字符.
4 ]! _- n5 U% ^8 J3 x) k0 I在第696-697行插入:0 }' f4 c3 i8 M0 u- }/ m1 w  D" t
  1.             win_chr = re.compile(r'(<|>|:|"|\/|\||\?|\*)')      # Windows系统保留字符& x7 u2 g/ I7 T) s5 }$ y
  2.             win_key = re.compile(r'\\(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])\\', re.I)      # Windows系统保留字
复制代码
# _5 D/ s, M" h7 ~' j
在第703-704行插入:
1 v; y0 S7 m, }, U* S, i+ [9 X# b5 N
  1.                 re_obj = re.search(win_chr, fname)
    * u6 D3 l. |+ s5 a
  2.                 if re_obj:$ B4 r( ?# g: ]. X  u2 @, J6 B: F
  3.                     fname = re.sub(win_chr, r'_', fname)        # 更换保留字符为: _! B7 r- ~7 a! E/ j1 H
  4.                     print(r'___ substituted "_" for "%s" ___ %s' % (re_obj.group(), fname))
    " y3 `/ B  S( `2 o
  5.                 re_obj = re.search(win_key, fname)1 J7 S! R  W; k: \, ~' ^
  6.                 if re_obj:
    : C: b* C- U, z0 @0 s3 E! O
  7.                     fname = re.sub(win_key, r'\\\1_win\\', fname)     # 更换保留字为: *_win
    " \9 I% X' i) l/ B# u
  8.                     print(r'+++ substituted "\%s_win" for "%s"' % (re_obj.group().replace('\\', ''), re_obj.group()))
复制代码

" B$ `4 {$ V$ N5 s建议打开命令行窗口运行文件. 这样可以用手抄下更改了的文件夹名和文件名(假如是有的话, 会显示).
& J7 T1 m2 ]+ [2 {( |# O6 N5 G( M/ g9 h3 l( K2 \; Q; l# a* ]# r  M
见附件中的readmdict3_mod.py- D( j( f0 r6 c
而readmdict2_mod.py是Python 2.7.x适用.
4 m# Y+ X1 U& D8 }
( \/ C7 }1 p9 [) P另外, 由于mp3转spx是极耗时间的事(而且还重新采样[目的是保证spx的品质], 更多耗了一些时间. 于是尝试学习使用Python 3.5.x多线程调用外部命令, 以提高转换效能.
" p6 F6 M! U5 W* p+ f# g: n% B由于是新手, 始终都没有办法了解到调用Popen()后何时才能知道外部命令完成的信息. 如果使用communicate()或wait()的话, 好像与单线程一样, 要完成了才执行一下个指令, 与call()无区别. 即使已经开了多线程, 情况没有什么改善.1 S3 x$ r/ O" S: \) F. I! `. F
所以就使用呆呆法(还请不吝赐教. 谢谢.): 一次转换使用一次循环. 因此三次转换就用了三次循环, 还是采用Popen(). 这样效能还是很高的. 线程数取于CPU核心数目. 这时CPU的占时可是100%全速开转.2 X2 Y+ ~# f9 O, S, B+ M
手提电脑要谨用. 不然的话, 风扇是极速狂转的. 很热很热的. (所以用dos转换就悠悠的. 反正晚上开转, 第二天早上基本就转好了.)2 c  H0 I6 p! A) p8 o
测试了一下, 线程数可以根据需要修改. 分别选1/2, 1, 2倍于CPU核心数目, 但等于核心时的耗时最少, 效能最好. 至于内存的情况, 呈浪涌形, 吃了5/600MB, 之后会释放掉. 情况良好.  m  }& S2 j; z5 f8 i- d
无论是用dos转, 还是用Python转, 都会删除原mp3文件的. 所以必须做好数据的备份.
- V% I) P$ S2 O0 z" g' T, E& |! E见附件的convert2spx.py适用于Python 3.5.x for Windows (没有做出错保护的功能, 也没有纠错能力. 在正常情况可以正常使用而已)./ ~% e" G  C. ^' l) P

) h0 _; F9 ?% C' T' n+ e) U2 F3 b3 h, E3 e" N: d# _/ G

本帖子中包含更多资源

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

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 | 显示全部楼层
    保留字好像有
    $ A  H- D8 g( m
    6 }$ y7 \0 p6 [. }   CON   COM1 - COM4
    % w2 h* B% J7 }8 a" f   PRN   AUX    LPT1. m8 c0 E! h; t1 k- G2 F
                                    # ^, K% T  w' Q% d. c

    6 _0 m& \6 }5 F! Y/ K% ?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 编辑 , }4 P0 |  E6 q5 y
    lzo 什麼的,應該 pip 可以直接線上安裝。

    5 Q( c) z; K- ~9 k
    , I/ O# }% o2 w6 m6 M3 ?+ n- P' \在线安装python-lzo会出错, 下载官方安装包打开setup.py安装也出错. 实在是水平有限, 没有办法排错. 幸好还可以找到whl编译版. 可以装上. (好像不安装也可以解压. 但readmict.py会检查, 装上求正常)
    $ L0 @3 T% u2 T  C' E第一次使用Python, 需要了解的东西实在是太多了.

    该用户从未签到

     楼主| 发表于 2016-6-28 12:24:47 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 01:08 编辑
    2 k; B7 N: ?# G! j0 [5 u
    & o( l7 f9 y1 ~" t: e关于Python/Windows平台pip安装的情况, 有些是可以直接安装的, 比如BeautifulSoup, 因为是直接用Python写的. 不需要用到C编译器. 如果安装lxml就需要安装C编译器. 这可多工作量了.8 Y) m8 g8 X4 k/ B/ a
    版本兼容:
    " ?% D3 J6 D+ }6 B. V8 }7 xhttps://wiki.python.org/moin/WindowsCompilers: p" u# L$ G; W; c/ k  Q
    如果是Python 2.74 n4 X. a  c: O. _: o& d. J) _
    https://www.microsoft.com/en-us/download/details.aspx?id=44266
    & G% y  t$ U. m% v/ ^如果是Python 3.5
    $ E0 ]5 K. t5 Nhttp://landinghub.visualstudio.com/visual-cpp-build-tools* w( V4 W' F2 N
    也可以用MinGW (x86)的. (不知道兼容性如何)
    % K+ e1 Q& w2 ~. C, }. ?7 f0 A% shttps://sourceforge.net/projects/mingw/files/- Q4 T1 M6 W6 d6 Q

    ' G; q  T, N5 j4 V折腾了好几天, 最后还是选用别人编译好的whl版直接简单方便快捷.) n7 l5 e: O' H2 i& b
    因为MSVC14下载要4GB, 安装完要6GB, 编译过程还有一堆问题在. 版本的兼容, 头都大了. 当然是自己的能力有限的问题了.) o# e* \- k" B% {. `' A% ]
    还是伸手的方便啊. 虽然是非官方的.
    - p+ \9 X' |% k' yhttp://www.lfd.uci.edu/~gohlke/pythonlibs/
    9 l0 _$ Y& ~' R# T9 c3 ], ~) l
    . M# X8 p0 D7 Q+ G# U  |3 `相应找到版本下载直接安装就可以了. (lxml也有的)
    6 D" e* k- R; T; }比如安装了64位的Python3.5, 下载3.5/64位cp35*amd64.whl文件.! E, ?  f# u- S$ O
    如果是安装了32位的Python3.5, 就下载3.5/32位的cp35*win32.whl文件.
    8 M; u) ?' q! E+ m% Q如果是安装了64位Python2.7, 就找cp27*amd64.whl文件. 32位就相对应为cp27*win32.whl文件.
    * y/ \1 X3 P4 t' w6 j8 u即不是依操作系统的版本, 而是根据所安装Python的版本来下载whl文件来安装.; }1 b7 i3 d$ o+ U3 h
    才几十KB到几MB. 不装6GB的MSVC14了.# m- K" V8 R/ t4 o+ i2 H+ O: ^
    2 J6 h( g* Y* ^8 [8 q
    非常谢谢.3 J0 M6 v4 i0 n, I+ p0 B

    该用户从未签到

    发表于 2016-6-28 22:08:59 | 显示全部楼层
    本帖最后由 asicsfree 于 2016-6-28 22:46 编辑
    $ F$ m& D* C6 d' W8 q9 V+ ]' d7 H) ?$ O% X
    請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?
    5 g- q+ n: X( g' h4 P4 h& p" T我想要測試一下。

    该用户从未签到

     楼主| 发表于 2016-6-28 22:53:39 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 03:39 编辑
    $ t, P% K! x+ h" T* p7 i( @
    asicsfree 发表于 2016-6-28 22:08
    7 m1 s2 O1 ?$ `; N# Q9 C+ `. {. Z請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?謝謝。

    " y+ Z) }  ^! I" I6 o- r. Z2 s4 \: m$ c+ A8 ~  k2 E* z1 X
    不客气. 目前刚巧偶遇一个:
    8 z: o1 `) L/ ]9 B是Amazon的OALD9简约风格.. }6 ~6 m/ Z9 {  B  {/ F
    https://www.pdawiki.com/forum/fo ... hread&tid=16587
      z0 y9 F4 A# {4 R2 _5 r7 ?* F
    一并感谢Amazon, keenper的大作.
    6 n+ q- {0 `. g, f' C0 P" [  i6 V

    该用户从未签到

    发表于 2016-6-28 23:40:49 | 显示全部楼层
    idict 发表于 2016-6-28 22:53. ]. B  |4 ^1 M8 X2 C/ e2 E
    不客气. 目前刚巧偶遇一个:% W9 g4 m6 b- _% F  C9 H
    是Amazon的OALD9简约风格.
    ( J; n9 L( c% L2 x0 }8 [  c0 g& Fhttps://www.pdawiki.com/forum/forum.php?mod=vi ...

    $ {1 M8 ]0 [& f5 I( a, C0 O感激,快來試試。

    该用户从未签到

    发表于 2016-6-28 23:45:12 | 显示全部楼层
    asicsfree 发表于 2016-6-28 22:08
    ) x" x( K3 x: i/ R/ E6 W請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?
      D. {2 W6 C( F% @" R, N我想要測試一下。
      f7 f" |9 k' Q* j
    Windows 有一個保留字:aux
    , N% k. C( S+ h9 F& @這個讓不少詞典的中招了,因為是一個常用縮寫。

    该用户从未签到

    发表于 2016-6-29 02:24:27 | 显示全部楼层
    PurlingNayuki 发表于 2016-6-28 23:45/ N5 L9 t' I: ?
    Windows 有一個保留字:aux
    , o% G6 k8 R% @% {- {, e4 O: \, `0 z這個讓不少詞典的中招了,因為是一個常用縮寫。

    - I5 @+ z! Y  y) ]) a0 U- i+ S. \可以介紹是哪一個mdd嗎?謝謝

    该用户从未签到

    发表于 2016-6-29 02:47:38 | 显示全部楼层
    asicsfree 发表于 2016-6-29 02:243 Z) U& c) ]0 O) V& p& z
    可以介紹是哪一個mdd嗎?謝謝

    % ]1 s) n: F* G( N7 _抱歉,具體不是很清楚了。首先很少打包及解包,其次我通常使用 Python 實現的 readmdict 在 OS X 下工作。
    6 u! n; I2 k" J) U, v! j不過如果真的想玩的話,大可以自行制作一個嘛。
  • TA的每日心情
    慵懒
    2018-10-24 13:08
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2017-5-12 10:04:52 | 显示全部楼层
    好难的样子啊
  • TA的每日心情
    擦汗
    2024-4-7 17:25
  • 签到天数: 503 天

    [LV.9]以坛为家II

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

    本版积分规则

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

    GMT+8, 2024-4-20 19:12 , Processed in 0.096092 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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