掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4335|回复: 14

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

[复制链接]

该用户从未签到

发表于 2016-6-12 03:25:22 | 显示全部楼层 |阅读模式
本帖最后由 idict 于 2016-10-30 08:08 编辑 ' [& C9 c& |$ J8 ~
2 t1 [) E& e( k# M8 ?% u/ x
首先多谢各位的帖子, 和论坛前辈们的教学帖, 以及大神们分享的词典. 让人受益良多. 非常感谢. 也非常感谢以下要使用到的软件的作者们!
6 |  A2 T2 E8 P
. [* T; e2 O+ _$ X, I: W愚人千虑偶有一得. 在重新打包Mdx/Mdd的过程中有点体会. (重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)
! `3 A6 Z' T# ~  Q$ p& X& j& [7 i9 x
重新打包的目的是希望继续使用Mdict PC版(因Mp3文件不能发音; GoldenDict是很好, 也很庞大, 需要时间学习).# u  w* a' J$ i7 K3 [9 ~
GetDict.exe v2.6很好, 在转换后会将目录名合并到文件名当中(需要重建目录结构也是麻烦事). 只好使用Readmdict.py了.! |# C5 A  z4 N  W
' W2 r" V: C; q4 p1 T% {( p4 Y
安装Python之32位版本(64位版本在全部下载里可以找到), 使用Python 2.7.x版本(Python 3.5.x双击不能引用Tkinter[可以自行改为3.5之兼容名], 在命令行输入参数是没有问题的). 安装选项: 全选 (必须的, 不然要手动增加Python的路径到Path)) h& \1 S9 S/ T) m3 v3 x: N2 t
https://www.python.org/downloads/3 `6 |. f; ~' y- a  |! t0 [+ j2 q

# q' k0 W0 _" W0 v1 }. a$ I6 |安装Python-lzo, 似乎这个不用安装也可以解压Mdd. 但XWang提到要安装. 就装上吧.* |/ }0 G8 y" C) d3 c( H
http://www.lfd.uci.edu/~gohlke/pythonlibs/#python-lzo- j0 c  L. n3 x! o$ V( i
  [& u+ w2 u2 r- h) H5 v; J
下载32位2.7版的, 64位的不能安装(即使在64位Windows, 版本位数是依据所安装的Python版本位数): python_lzo-1.11-cp27-none-win32.whl
$ M$ s5 u) K" g, L$ c  q" c然后以[管理员](重要, 否则不能正常安装)打开命令行窗口cmd.exe. 输入: (文件的目录名, 换成所在的下载目录名, 我的下载目录名是: r:\downloads, [下同]. 输入whl必须是全名, 也不能改名, 否则会出错.)# ~+ D4 R7 R. S) F, W0 D3 @5 i' o
  1. pip install r:\downloads\python_lzo-1.11-cp27-none-win32.whl
复制代码
# _' X* H% E0 L1 l
(如果pip提示要升级, 就按提示方式升级, 再安装也可)
# _0 ]7 Q& G1 @8 T
  1. python -m pip install --upgrade pip
复制代码

- r: N9 N" T. ]2 Z/ ~查看是否安装成功:% g' C" h- Y8 M* x6 d  z
  1. pip list
复制代码
, i3 S+ y/ e. @% U/ f
如果成功:
" O. j0 `" e' E
) {! S7 T% i! e; f! l! N( Q5 h2 ]/ F; z6 }2 o
下载Readmdict.py  M+ c0 W. l- Z' h% M5 a8 f1 f
https://bitbucket.org/xwang/mdict-analysis/downloads+ P7 F- I) P# w  n7 M
解压zip后可以直接双击运行 Readmdict.py 选择要解压的mdx, 相同名称的mdd会一并解压. [***重要步骤***]
: e1 n# z1 z7 f0 i9 U! c2 N就会生成相应的txt和data目录.
& C  t2 J' K& m$ X+ t* V0 b
- t  Z9 r/ x$ Q! q2 Y9 Q在解压一些Mdd时, 如果有目录名是Windows的系统保留字时, 就会出错(如OALD9, 如图Title):
6 X/ b4 E3 s- w) M5 L& e# j1 j0 h# W1 I# K+ c3 T
9 j) }; n. F* \/ E: ?. A/ H; _
只好更改目录名称了.4 `4 G$ U% \0 [
打开Readmdict.py(不要用Windows自带的编辑器), b- F9 i  }/ B* p+ F
在700-701行之间增加替换目录名称的代码: 必须注意缩进, 建议不要用Tab, 改为空格(这是Python的建议), 或在编辑器中选中: Tab转为空格; 4个空格为一个缩进.
2 ~# |: A  G3 A6 F, j& c% r; ?& T! Q% x插入的代码时对齐上一行的fname = ...
# ^, p  N" B2 o( \  N0 N
  1.                 win_key = '\\con\\'          # Windows系统保留字
    1 T6 z- X" j9 z. a8 a/ I4 o3 R5 c$ r
  2.                 if fname.find(win_key) >= 0:
    4 l5 G# i& J4 I
  3.                     win_key_sub = '\\con_win\\'         # 替换的非保留字7 x5 l4 K% M6 i; {2 C
  4.                     fname = fname.replace(win_key, win_key_sub)         # 更换原字符串
复制代码
5 |! R7 n, t' D( w% Y; _# W
这样目录名: con 就会变成: con_win (其他的关键字没有作处理, 有一个改一个而已, 因为水平啊)
* ?: z% F3 ^; P, M3 K9 J相应地, 在Mdx的txt文件就必须要改替换: /con/ 为: /con_win/ [***重要步骤***]
* L) t6 F) V+ x& G. S附件中Readmdict_mod.py是增加后的py文件.
! N5 D+ j9 u8 J: \& R8 h( a+ C
- ]. f% d9 `" d$ c/ S/ M7 X接下来就是转换Mp3为Spx了. (附件中lame.exe v3.99.5, speexenc.exe v1.2beta2)
$ y& F" s6 j* |6 v/ x! J. |在转换spx之前必须将mp3转换为wav, 建议使用Lame.exe
6 m1 V0 C: K5 n. `http://www.rarewares.org/mp3-lame-bundle.php
. X& x. d- c7 F+ \* e4 A3 R! \, }+ H% m) E+ F+ ~+ O+ l) c
再将wav转spx, 但这个speexenc.exe的1.2beta1.3并不兼容Win 7之后的系统. (或MdxBuilder里带的speexenc.exe都不兼容)
! \. P5 q3 e( [. O  |$ p+ L8 ohttp://www.speex.org/downloads/
" \6 b4 ?& B/ ?1 U/ R5 ?" t
: O" M- U8 Z- X. `: x% f% n* j所以就要找其他的版本. 附件中是1.2beta2可以兼容(取自于Audio Transcoder, 这个软件在转换过程中很吃内存. 一下子就吃光了[在安装时会有附加软件]. speexdrop很好, 但不支持目录)
' M# c) }4 g6 M  R% Y这个是MSVC9, 微软的编译器. 兼容. (虽然写是1.2rc1, 但实质上是1.2beta3)
, i, M7 A# N9 L* Q# uhttp://www.rarewares.org/others.php#speex-unstable-win
3 h  d7 c9 @& X' U: D1 a7 O
* p, S$ W' v! J' r0 t) y0 r现在要考虑的是:5 V" U/ d1 s/ [. }7 p8 p6 _$ S! H: r
speexenc.exe对采样率8/16/32kHz有优化. 而且mp3的采样率通常是16/22.05/44.1kHz, 不在同一采样率上.  \; z$ w: u' l1 P" G
如果重新采样, 会增加转码时间. 如果不重新采样, speexenc.exe在转码时的编码率会不尽相同. 转换后文件大小也不尽相同. 通常变大多1/3-1倍.
/ {9 t9 G9 a2 m4 F所以选择重新采样, 这样可以用时间弥补质量上和文件大小的差别. 于量尝试写批处理.) D3 `4 y7 V# K' ]! j6 e# L% d7 l- ^
  1. :: convert mp3 to spx! {3 j; N; ^4 h- ^$ ]
  2. @echo off4 m' `" t: e, |+ _8 H' T
  3. color 3f
    * W$ Q5 x' C4 a
  4. cls- n% b" J3 ~  V9 _

  5. 1 |- u3 H5 H( ^$ N  P! \

  6. % H1 ^7 Q. V0 b4 S9 X
  7. :~begin8 B0 w& X+ [! b: ^+ t" y9 h0 ^* x8 N3 r
  8. :: mp3所在的文件夹全路径名7 n) S2 v$ Z3 h; K& J% q" t- i
  9. set _folder=r:\downloads\data
    + i) p1 t. V" B' E
  10. if not exist "%_folder%" (
    8 O0 o7 E' W1 H/ n3 h0 I7 y
  11. echo. %_folder% 文件夹不存在.
    + `/ j# t0 P% |4 D1 {$ I. b5 q
  12. goto :~end)
    8 G- t+ v' _  o6 F7 t; [9 f0 \
  13. " U7 ?; w8 ]3 \1 c
  14. for /f "delims=" %%i in ('dir /b /s "%_folder%\*.mp3"') do (- E8 T1 Q: p5 b- L6 Z# Z0 d
  15. echo. %%~fi0 M, r6 d- o: L) W: j, Y3 M" F
  16. lame.exe --silent -b 32 -m j -h --resample 32 "%%~fi" "%%~dpni_new.mp3"
    7 _4 `3 {; ]( x8 S" D
  17. del "%%~fi"
    8 b  ~: g; {1 V
  18. lame.exe --silent --decode "%%~dpni_new.mp3" "%%~dpni.wav"
    6 G- @5 H$ ~8 d" y& @5 V$ S
  19. del "%%~dpni_new.mp3"
    ( n! {3 }% D4 B. p. u5 b
  20. speexenc.exe -u --bitrate 24000 "%%~dpni.wav" "%%~dpni.spx", n3 [, |% d( U; M. k/ l
  21. del "%%~dpni.wav"
    4 g1 ?5 J/ ~! f, ~7 l
  22. ); m9 J& A1 p3 e, \( o2 O# j) O

  23.   u& E( O% B- @: z

  24. % Y5 ]$ D! d3 J$ a
  25. :~end
复制代码

$ Y3 J& R( {) N8 T" ?第9行是mp3所在目录名. (我的是: r:\downloads\data)
/ ?4 i4 a3 u1 b  P8 W0 h. ]0 C第16行是用Lame.exe对mp3重新采样. 参数: -b 32 是编码率: 32kbps,  参数: --resample 32 是采样率: 32kHz. 如果Mdd里mp3是24kbps, 11kHz的质量不算好(如果相同参数转为spx就质量损失很大). 质量好是22kbps, 22.05kHz.
6 C# C' b; l3 B' ~4 L4 B) g第18行是用Lame.exe对mp3解码为wav.
. r4 p0 i, R+ W9 _. a第20行是用Speexenc.exe对wav重新编码压缩为spx. 参数: -u 是32kHz采样率优化, 参数: --bitrate 24000 是编码率. 可对应原mp3的码率而定. 如果原来mp3是24kbps, 22.05kHz, 经重新编码为24kbps, 32kHz的spx文件大小大致上没有变化. 而且保持相当质量., E% {+ q  d9 M
第17/19/21行是删除mp3/wav文件. 所以必要备份数据./ |+ S! P' F/ h7 v
  ]7 P2 |2 l6 [( k5 U( I1 R5 d
然后打开cmd.exe命令行窗口运行批处理. [***重要步骤***]
& Q0 Y& ]! K& X% b附件中convert2spx.cmd
1 i6 k9 R6 F' p$ d( w5 P. g' c8 Z9 a9 T* Z3 a' w
这个批处理可转换目录结构里的mp3. 但没有排错的功能. 所以不能用Ctrl-C中断. 如果中断了, 可能会增加重新采样的新文件如: *_new.mp3/wav/spx等文件. 就会发生文件数量不一致了.
# s/ h% m4 R) d% ~) U如果mp3文件是128kbps, 44.1kHz的话, spx最好也是32kHz采样率. 至于编码率32kbps的质量也是很优秀的了, 文件大小也很优秀, 毕竟speex是针对语音优化压缩的. 或许是使用ogg格式编码的. 应该比mp3格式好吧. (重新采样时, 相应将编码率改为128kbps: -b 128)8 L. u# T/ C! Q
转码时间是很漫长的, 15万个mp3文件可能要8个小时, 看机器的情况. 完成转码后吃不到1GB内存, 或者更少吧.' h& Z# {- b, z6 f8 I
完成转码后, 再次核对文件数量是否一致. 到目前为止, 还没有不一致的情况. 还好.
/ O$ S' W) L; [! t4 |$ `3 `4 o+ h
6 `/ e3 y" n, ]相应地, 在Mdx的txt文件就必须要改替换: .mp3 为: .spx [***重要步骤***]8 ?, i( k: M5 d) {! h
如果一致就可以用MdxBuilder直接重新打包了. 通常都将css和js放在data目录下一起打包为mdd. 以免丢掉了.9 Z0 z5 i7 D7 {) M# [; r% g
% J/ [! \3 x+ U% m7 z+ X. V
这样就可以在Mdict PC也使用. 目前也有一些js不能正常运行的. 因水平有限就不知道是什么原因了.0 ]7 p* A( H* f# R  i! f

' y' c; I" _% ~9 u7 w* H2 U$ \6 I4 P2 y& f0 L
但就不会出现不能播放的问题了.
' L( Q' S' J1 X2 X; M6 Y2 V+ N* q0 p
9 c3 i/ k2 ]( K) k$ M
再次多谢各位! 谢谢.. X! V* p$ P# n$ O1 s) f; U+ g
(再次重申: 只是重新打包的过程, 其他的如排版等等...的并不会.)
% w5 t" X# Y" p/ R) w, W% N, K* G. W5 k1 ^- \
( u+ ]4 _4 n8 F7 B* O7 ~8 V8 u2 F8 E0 M
(如需要, 请下载下面更新的附件[适用全部的关键字和关键字符{除\外}])
- V2 J3 X( t; X* P& j' A# l4 _$ G2 y2 E

) s9 s1 B2 `2 \; w0 i6 k4 u+ V8 L
* D% t3 J! Z, V2 J1 f2 |8 ?, n
% d8 \: y& s/ F
2016.07.08更新9 Z7 n  t1 `& ?. |0 }

+ K1 X5 p$ H. c, k/ d经过漫长的摸索, 终于对Python有点了一丁丁点的了解. 并转到了Python 3.5.x  ]1 f9 |# A, e" C# A3 \$ j* N, N
查看了有关Windows的关键字和关键字符. (谢谢asicsfree, PurlingNayuki的信息)
$ ^' i! n) G2 C" I4 {( s4 h! Shttps://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx; l: S7 A3 @! I( M" ?7 y
  G% g( x4 a- Y% U; `, l5 l
The following reserved characters:& I' h& v5 @6 x: O* b, k6 N- Z1 K  K
    < (less than)$ ~( C2 _% d8 s4 h
    > (greater than)
+ P1 \' X. Q; W6 _6 ~    : (colon)& M" x1 e# }' Z; w6 ?
    " (double quote)
  w! C) h& N5 D    / (forward slash)
) [0 w1 y" v3 g    \ (backslash)6 l" Z: V7 A* P$ w; [0 u
    | (vertical bar or pipe)
- R. y  r9 D0 N5 F6 q7 N    ? (question mark)( ~2 V8 }" F2 E* e5 b: q
    * (asterisk)
Do not use the following reserved names for the name of a file:
9 \9 s' O% u$ W7 \4 ECON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.

; C- a& D- ~* F1 C所以重新整理了一下Windows下的文件名/文件夹名称的问题.( D8 d  T& |# p2 |: e
首先是readmdict.py在Python 3下不能导入Tkinter, 原来是改了名字为: tkinter9 z1 j% h' G2 _+ Y3 n
因此将634-638行换成: (以下全部都要注意缩进)
' {  m3 f0 Q, Q& U% F
  1.         from tkinter import filedialog
    . k0 z* w' O7 `2 {3 f/ I
  2.         from tkinter import *
    ( b6 F- ~& ?2 K; G9 S+ ~
  3.         root = Tk(), _, P4 D3 l- D1 w
  4.         root.withdraw()$ f9 ]; ]- b# f: F7 _# Z* Z* {
  5.         args.filename = filedialog.askopenfilename(initialdir = os.path.abspath('..'), title = "Select a mdx/mdd file:", filetypes = (("mdx/mdd files", "*.mdx *.mdd"), ("all files", "*.*")))
复制代码

. o3 t1 t2 i. l% W6 X- [至于关键字和关键字符.: O6 q8 X! L( L7 g: b
在第696-697行插入:
! B& @" k$ M6 a& a' w" g
  1.             win_chr = re.compile(r'(<|>|:|"|\/|\||\?|\*)')      # Windows系统保留字符
    ) v9 f+ G4 E* d( R" v7 [8 ]6 u
  2.             win_key = re.compile(r'\\(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])\\', re.I)      # Windows系统保留字
复制代码
" f5 y* N+ l' T
在第703-704行插入:. N9 x, ~: N; O6 ^) b( E9 y
  1.                 re_obj = re.search(win_chr, fname)
    , |7 o# P4 u9 M5 V7 q
  2.                 if re_obj:
    & Y. q( @1 b# e# Y" l
  3.                     fname = re.sub(win_chr, r'_', fname)        # 更换保留字符为: _6 p! g9 j% w" H( D& V
  4.                     print(r'___ substituted "_" for "%s" ___ %s' % (re_obj.group(), fname)): l/ h9 s* l5 P9 z3 y
  5.                 re_obj = re.search(win_key, fname)! V- E- C8 A3 z. I/ w! l2 k
  6.                 if re_obj:/ _" O( G4 C& i
  7.                     fname = re.sub(win_key, r'\\\1_win\\', fname)     # 更换保留字为: *_win( l: j7 }; G8 s1 L) f6 q" v7 t: L
  8.                     print(r'+++ substituted "\%s_win" for "%s"' % (re_obj.group().replace('\\', ''), re_obj.group()))
复制代码
9 N6 ]+ x2 B3 V3 z, D2 j$ `: ?
建议打开命令行窗口运行文件. 这样可以用手抄下更改了的文件夹名和文件名(假如是有的话, 会显示).. j; [+ R6 I! [) {% g% I& _9 S& A

3 {) _% R0 ]; a2 p! o见附件中的readmdict3_mod.py9 A, E$ q! p$ s% Y" z  R3 B6 q" U
而readmdict2_mod.py是Python 2.7.x适用.
+ M  d+ K/ ^, m& U/ e, f4 f0 ^9 c7 \+ z% ^: S7 B
另外, 由于mp3转spx是极耗时间的事(而且还重新采样[目的是保证spx的品质], 更多耗了一些时间. 于是尝试学习使用Python 3.5.x多线程调用外部命令, 以提高转换效能.
( r% f3 s% e; G" R* ~8 k由于是新手, 始终都没有办法了解到调用Popen()后何时才能知道外部命令完成的信息. 如果使用communicate()或wait()的话, 好像与单线程一样, 要完成了才执行一下个指令, 与call()无区别. 即使已经开了多线程, 情况没有什么改善.* @% W- b5 Y8 N$ j
所以就使用呆呆法(还请不吝赐教. 谢谢.): 一次转换使用一次循环. 因此三次转换就用了三次循环, 还是采用Popen(). 这样效能还是很高的. 线程数取于CPU核心数目. 这时CPU的占时可是100%全速开转.
8 p& o+ ?+ i" F" \; I# B& i' m% ~手提电脑要谨用. 不然的话, 风扇是极速狂转的. 很热很热的. (所以用dos转换就悠悠的. 反正晚上开转, 第二天早上基本就转好了.)
, c( R7 d( ?& v* R0 E% s; O, ^测试了一下, 线程数可以根据需要修改. 分别选1/2, 1, 2倍于CPU核心数目, 但等于核心时的耗时最少, 效能最好. 至于内存的情况, 呈浪涌形, 吃了5/600MB, 之后会释放掉. 情况良好.
# t7 D0 Y+ l/ I. P: N+ k4 K0 E无论是用dos转, 还是用Python转, 都会删除原mp3文件的. 所以必须做好数据的备份.+ m" o4 q# j8 X& ]9 k4 y0 P/ Q
见附件的convert2spx.py适用于Python 3.5.x for Windows (没有做出错保护的功能, 也没有纠错能力. 在正常情况可以正常使用而已).( q" e$ Y5 u/ C
" f8 m* c, Y! u6 C3 K
4 k2 P0 L& |- E2 o4 h! B' p' ~

本帖子中包含更多资源

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

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 | 显示全部楼层
    保留字好像有 - R" u2 c  M) r; r- _' l" R

    , Y' V! _: B" F9 a% g1 g   CON   COM1 - COM4
    / P6 E1 O7 G. j# }: k   PRN   AUX    LPT1
    ; s3 v) @+ Z9 E5 z                                # \3 K! {, ?# i" D6 n1 N& U
    $ C4 [! u: ~, H6 ^. R2 `* T% P
    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 编辑 - p, B. A, e( ^6 p
    lzo 什麼的,應該 pip 可以直接線上安裝。
    / b. z! o9 ~/ J  q, E/ M0 ]

    . A% J) S/ W' [8 Y9 l在线安装python-lzo会出错, 下载官方安装包打开setup.py安装也出错. 实在是水平有限, 没有办法排错. 幸好还可以找到whl编译版. 可以装上. (好像不安装也可以解压. 但readmict.py会检查, 装上求正常)
    & {; s8 ^# N4 z( H$ ^第一次使用Python, 需要了解的东西实在是太多了.

    该用户从未签到

     楼主| 发表于 2016-6-28 12:24:47 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 01:08 编辑
    3 w: w% R/ H0 P; C, V' `3 d, ]. w- S% }( j% t0 w3 }: k
    关于Python/Windows平台pip安装的情况, 有些是可以直接安装的, 比如BeautifulSoup, 因为是直接用Python写的. 不需要用到C编译器. 如果安装lxml就需要安装C编译器. 这可多工作量了.
    4 v0 V7 q9 o% G: e% m版本兼容:% B0 W$ K" E- i5 w* ~- x; \$ C- c
    https://wiki.python.org/moin/WindowsCompilers
    9 b. k) c0 n1 D; s0 {, r如果是Python 2.75 N: W" s9 q6 D- }; z& m1 C5 K0 y
    https://www.microsoft.com/en-us/download/details.aspx?id=44266- u/ a* I/ r2 l  x- W! q% Y
    如果是Python 3.5
    ; f( [( z4 P6 {http://landinghub.visualstudio.com/visual-cpp-build-tools. k: ]4 \3 s5 v- a  c
    也可以用MinGW (x86)的. (不知道兼容性如何): N6 U4 {/ \. t9 q: @. _; P
    https://sourceforge.net/projects/mingw/files/
    ' y! G; Q$ `  u% M  r, @3 ~8 D) E, [; m, m# K$ }( }4 z
    折腾了好几天, 最后还是选用别人编译好的whl版直接简单方便快捷.# T- ]& H( F- Q0 B2 l/ d
    因为MSVC14下载要4GB, 安装完要6GB, 编译过程还有一堆问题在. 版本的兼容, 头都大了. 当然是自己的能力有限的问题了.
    - H% h& {3 g0 G4 b7 U4 c" _% ^. u还是伸手的方便啊. 虽然是非官方的.
    : u+ ~9 O4 D4 y! F9 M; @! Ahttp://www.lfd.uci.edu/~gohlke/pythonlibs/
    ! S. ?$ O5 [# z) f2 d/ `3 g: \
    4 v# b: u! b; t% E9 A相应找到版本下载直接安装就可以了. (lxml也有的)
    3 [6 S2 x* B2 g: E比如安装了64位的Python3.5, 下载3.5/64位cp35*amd64.whl文件.# D& S, w) q( w; ^! V$ G' M, p5 x9 J3 R
    如果是安装了32位的Python3.5, 就下载3.5/32位的cp35*win32.whl文件.
    8 R( n, L6 z# W1 p: g4 [如果是安装了64位Python2.7, 就找cp27*amd64.whl文件. 32位就相对应为cp27*win32.whl文件.& f% U1 K0 g. U' i& Q4 k; S
    即不是依操作系统的版本, 而是根据所安装Python的版本来下载whl文件来安装.
      n, A# j/ n$ N; [% s# R才几十KB到几MB. 不装6GB的MSVC14了.) m3 N+ @) v9 J
    . T9 R+ z7 Q& M& ]
    非常谢谢.! h) J3 b+ Y/ f- @  [

    该用户从未签到

    发表于 2016-6-28 22:08:59 | 显示全部楼层
    本帖最后由 asicsfree 于 2016-6-28 22:46 编辑 , C- Y" |: V* @4 B$ x7 p

    # h2 s- t- L5 d請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?
    $ w* m# t6 e, d6 A$ z我想要測試一下。

    该用户从未签到

     楼主| 发表于 2016-6-28 22:53:39 | 显示全部楼层
    本帖最后由 idict 于 2016-6-29 03:39 编辑
    1 u/ x( U; c. B4 M9 K9 w! G
    asicsfree 发表于 2016-6-28 22:08, c+ A4 Y7 ^7 s) W# a9 T. G) c
    請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?謝謝。
    % L2 {2 `6 m$ U7 _

    & W) I2 W1 m# X不客气. 目前刚巧偶遇一个:* x6 d$ k) D0 [9 I6 ]$ \6 m
    是Amazon的OALD9简约风格.5 }$ F$ O0 n* R. H$ Q
    https://www.pdawiki.com/forum/fo ... hread&tid=16587
    5 Q7 C. [1 p  N* q
    - q6 h% I8 K8 f1 C0 n+ q( n$ S, [! U" V一并感谢Amazon, keenper的大作.  ]# R! z0 x3 p* N5 w+ l

    该用户从未签到

    发表于 2016-6-28 23:40:49 | 显示全部楼层
    idict 发表于 2016-6-28 22:53
    7 P6 a! f2 Z; V4 c! C1 U不客气. 目前刚巧偶遇一个:% }$ B- g3 N' h" T& O( f9 B3 e' X. \
    是Amazon的OALD9简约风格.; x7 c) ?' u, Y  H; |
    https://www.pdawiki.com/forum/forum.php?mod=vi ...
    ) A' H3 c; H; X7 j8 o
    感激,快來試試。

    该用户从未签到

    发表于 2016-6-28 23:45:12 | 显示全部楼层
    asicsfree 发表于 2016-6-28 22:08
    : u# M( @# m0 W+ L請問哪一個mdd會有windows保留字的內容?可以介紹一個嗎?
    2 U( J7 i6 a, S2 K) V我想要測試一下。
    ! n: C3 \3 q; [. U
    Windows 有一個保留字:aux  R6 {  x& F3 ~3 I3 _4 U
    這個讓不少詞典的中招了,因為是一個常用縮寫。

    该用户从未签到

    发表于 2016-6-29 02:24:27 | 显示全部楼层
    PurlingNayuki 发表于 2016-6-28 23:45, a. ~: x5 H; \2 N: i" w
    Windows 有一個保留字:aux
    0 N0 a! G1 D; [) b- C& M$ P2 \) y這個讓不少詞典的中招了,因為是一個常用縮寫。
    6 E; h0 i0 N7 f1 [/ B, x
    可以介紹是哪一個mdd嗎?謝謝

    该用户从未签到

    发表于 2016-6-29 02:47:38 | 显示全部楼层
    asicsfree 发表于 2016-6-29 02:24
    . ^7 A! y- [2 w- @; u可以介紹是哪一個mdd嗎?謝謝

    0 |9 t. a- j4 e% i3 D  ]# G抱歉,具體不是很清楚了。首先很少打包及解包,其次我通常使用 Python 實現的 readmdict 在 OS X 下工作。
    - @8 G0 g* y7 ^0 K2 s不過如果真的想玩的話,大可以自行制作一個嘛。
  • TA的每日心情
    慵懒
    2018-10-24 13:08
  • 签到天数: 30 天

    [LV.5]常住居民I

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

    [LV.9]以坛为家II

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

    本版积分规则

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

    GMT+8, 2024-5-9 15:08 , Processed in 0.058865 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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