掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 895|回复: 16

[工具] txt文本格式化工具mdxFormat(python3.9.5编写)

[复制链接]

该用户从未签到

发表于 2021-7-25 10:47:05 | 显示全部楼层 |阅读模式
本工具适用python3.9.5编写。可以把指定路径(包含子目录)下的txt文档格式化为mdxbuilder使用的格式(每个词条三行:key,value,</>)。
+ s: D2 E  ]6 ^特点:
; h7 T8 \4 ~& o' F1.支持不同编码格式的txt文档,默认输入输出均为“gbk”编码。; i3 V6 j7 E' f/ E5 M( d
2.我写这个工具是为了整理个人的常用资料,为关键词添加超链接,实现跳转。2 j- X& c. p5 j' X) Z. K  R9 v
ps:我以前一直使用其他人写好的程序格式化txt文档,但是如果关键字之间存在嵌套,超链接格式化有问题,所以我自己编写了这个程序,但还有一点不完美之处,就是不能很好的解决自身跳转的超链接。望大神指点!( s& K0 N, o" J( K4 ]% R8 x2 O
& Q$ M4 c: ]3 d" X# e

本帖子中包含更多资源

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

x

评分

1

查看全部评分

该用户从未签到

 楼主| 发表于 2021-7-26 12:34:25 | 显示全部楼层
n0thing 发表于 2021-7-26 02:18
) a6 f6 x2 b: ^% P0 H2 _能不能發一個 .txt 的範例?
7 V* B# L; t0 _8 w- p% |+ |
txt文档的文件名为关键字、文件内容就是词典内容。: U, z% s* ?( {- K+ q' H" L" G( w& F
- |3 ]# E! G% U) n7 Y
我主要为了实现资料间的超链接跳转。

本帖子中包含更多资源

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

x
  • TA的每日心情

    2021-7-8 21:03
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 2021-7-26 02:18:24 | 显示全部楼层
    能不能發一個 .txt 的範例?
  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    发表于 2021-7-25 11:58:06 | 显示全部楼层
    默认输入输出均为“gbk”编码
    能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊
  • TA的每日心情
    开心
    2019-8-21 19:27
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2021-7-25 12:23:14 | 显示全部楼层
    支持mdx制作脚本

    该用户从未签到

     楼主| 发表于 2021-7-25 14:34:00 | 显示全部楼层
    本帖最后由 muyuzhth0 于 2021-7-25 14:38 编辑
    : S5 t/ l$ g( ~8 b- M
    kyletruman 发表于 2021-7-25 11:58
    % j' h# a7 o+ P/ a6 [能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊
    . y9 P8 V, H- u4 c* B3 R% Q8 c
    $ h; O$ I: F& I% B
    我制作的txt文档源文件是gbk格式的,如果您的是utf-8,只需要把writeTxt()函数里,f=open(outPath,"a",encoding="ANSI")这条语句的ANSI修改为utf-8即可。

    评分

    1

    查看全部评分

    该用户从未签到

     楼主| 发表于 2021-7-25 14:34:45 | 显示全部楼层
    本帖最后由 muyuzhth0 于 2021-7-25 14:40 编辑
    ! }3 V: i4 Y) C: y
    + r, K$ U1 c" _' x2 i0 J输出默认是gbk
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-6 20:16:02 | 显示全部楼层
    我的版本是 3.9.7  , 遇到了问题 。请帮助
    ' M) e* l+ i% {. G. V8 |5 \) l
    ( e  T, M- E. S' ]
    1. ❯ python mdxFormat_upload_V3.5.py5 M' h7 l4 N, Z8 g
    2. 没有发现文件名相同的文件,处理中...6 F% M5 D2 O+ |+ ~+ D$ d( I
    3. 找到了4个txt文档,
      : S6 }" e! Z+ {% }
    4. 开始格式化、合并文档:( l; H" _- W/ b
    5. 读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/药品检查管理办法.txt
      # G! K: I. H% X. f/ t* y* q
    6. 已完成第  1   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/我的广告法管理条例.txt* Q; O& g: `+ g6 b  s5 G" N4 q) @
    7. 已完成第  2   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/北京市反食品浪费规定.txt
      3 F$ K, ?4 O9 W% w! k" i5 D
    8. 已完成第  3   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/中国共产党组织工作条例.txt
      9 s1 Z- B3 J  S5 l1 T* N, L/ H
    9. 已完成第  4   个
      / x$ G7 a5 j. R: o3 v
    10. 开始循环添加超链接关键词辅助标记:
      8 g7 K& z9 Q9 ?- @
    11. 已完成第  4   个; c: G+ d5 |5 r+ a1 q' T# |
    12. 开始循环清理嵌套的冗余的超链接关键词辅助标记:7 H5 H' i2 L& R( B# J4 Z0 W/ @
    13. 已完成第  4   个/ m$ `5 w6 H. O8 q" f
    14. 开始添加超链接,
      8 V0 }5 U3 i) B
    15. 开始清理辅助标记,
      $ V: Y) A' D' m- a
    16. 开始写入文本,( ~9 o# b# B+ v) ^! A$ K
    17. Traceback (most recent call last):+ B% H2 H' [( p
    18.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 219, in <module>) Z, R6 l. i, e' Y- p
    19.     main()
      ) o& S/ _. m. L9 [3 s5 k
    20.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 213, in main" P. D3 r, G  @& z' C3 V9 u! f8 p
    21.     mdxFormat(path,outputPath)
      * V$ k' f6 I  W  @- j
    22.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 198, in mdxFormat
        C2 J7 Z: n0 j2 X, Y2 c5 o
    23.     if writeTxt(txt,outputPath):3 n6 Q% }! i4 O! E. R! r3 g
    24.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 48, in writeTxt4 ]$ E3 e8 }: K9 V4 ]/ |
    25.     os.mkdir(path)
      / |+ ~& \$ y8 x* J8 L: X: M
    26. FileNotFoundError: [Errno 2] No such file or directory: ''
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-6 22:34:08 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16
    + m. t+ s* k" `  h我的版本是 3.9.7  , 遇到了问题 。请帮助
    9 ]# Y2 M! e* s
    mdxFormat读取文件的路径是绝对路径。你得在mdxFormat_upload_V3.5.py-中设置下文本文件的路径。有个变量“path”

    该用户从未签到

     楼主| 发表于 2021-10-6 22:47:27 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16$ ~6 b- _2 l) I& T+ V- s
    我的版本是 3.9.7  , 遇到了问题 。请帮助
    * }9 b8 r. f+ @8 S! N# ?  C& `% p
    你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-7 07:59:27 | 显示全部楼层
    muyuzhth0 发表于 2021-10-6 22:476 D' c) Z& d' ]+ t
    你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。
    : `4 }4 M: i0 T
    好的!!  麻烦了$ E4 g& |+ k% x. _9 }/ G4 i5 h
    2 s/ c7 S. S4 y! G5 y
    1. import os9 Y: D1 x' m7 ~; f3 j* p$ r
    2. import glob3 k. h/ ?9 M9 E- E6 h8 A6 G! X
    3. import re* d$ a) {9 F7 ^' ^
    4. import time
      3 j: x" P# Y; m! c  H' k  M
    5. ' n5 W$ b" w( J' p
    6. #遍历所有子文件
      # v. ?' P4 _; G8 S+ q
    7. def getFileListAll(filePath):
      " N$ {, @% |" p; j
    8.     filelist=[]
      3 R% b" Q: R, S; ?5 k
    9.     for root, dirnames, filenames in os.walk(filePath):- g0 x- d3 c  V. T1 S! {
    10.         for filename in filenames:
      % G4 L# x& Z9 h. M( _
    11.             filelist.append(os.path.join(root,filename))5 P0 N0 Y" m4 H" V0 q( p' G
    12.             #print(os.path.join(root,filename))
      5 o( E9 j0 T7 ^
    13.     return filelist
      5 m1 C) V/ N1 o  n( {  {6 }& [
    14. . V5 m) J. o* g6 t* p
    15. #判断是否为txt文档" T1 R, J- |& E
    16. def isTxts(nameList):6 y* x1 x, K, T: w# i$ z  R' C3 p
    17.     pattern=r"^[^~$].+\.(txt)$"   
      8 j$ @; H6 v# k6 s, J" K+ a* g
    18.     patternObj=re.compile(pattern,re.I)
      8 E( d. ^/ }/ I
    19.     notTxtList=[]
      - d5 f, E& b; v* X. x
    20.     for fileName in nameList: 1 e/ S  c# p" b% S  i/ T
    21.         if not patternObj.fullmatch(fileName):   #判断是否为txt文件    % c6 C/ v0 E9 w7 i8 e# H. a  A
    22.             notTxtList.append(nameList)$ @% v) W& G6 y7 h1 h
    23.     if notTxtList:
      + B9 q+ B& k$ w9 n- ~" W
    24.         print("存在非txt文件:{0:},请处理后再运行程序!".format(notTxtList))# ?+ a; k8 F, h. H
    25.         return False
      ) O' H3 X1 W1 a
    26.     else:; w, u' Z7 u2 g; i
    27.         return True    3 B" d* K: V2 A* v

    28. ( y- p9 Z  G! e* I; Y+ X- s( r) G
    29. #在指定的txt文档中查找关键字! T: r& |. B6 K0 _* R9 N4 b3 W
    30. def readTxt(fileName):#strkey:查找的关键字;fileName:文件路径7 A" n; A4 R( b0 i
    31.     pattern=r"^[^~$].+\.(txt)$"    * i' `/ j* O& z
    32.     patternObj=re.compile(pattern,re.I)
      : {9 T4 u) v) Q" y0 R% G! E# v
    33.     if patternObj.fullmatch(fileName):   #判断是否为txt文件            
      ! }5 H! ?3 |; M3 H( }  p. }# \
    34.         try:  m' X3 e4 T% s9 _9 D; E
    35.             f=open(fileName,"r",encoding="utf-8")
      3 j# W; a! u1 l* n2 e& z
    36.             txt=f.read()2 f! G, O* U- y0 L. ~' e& m
    37.             f.close()            
      7 y* Y5 M: m6 }. c8 b' ?
    38.         except:( i  I4 q4 P7 D4 X8 P' Z  Z6 p
    39.             print("读取文档失败:{0:}".format(fileName))
      5 i0 m3 H/ S/ v( O/ n
    40.             return ""            
      : n; U, q  |- ^/ T
    41.         else:   #无异常时,执行
      5 Q; A) E3 L5 y" T' l. E6 S
    42.             return txt
      " s. K* y$ y; P/ }% a: {/ J$ V) d; {
    43.         #finally:    #无论是否异常,都执行
      9 J9 R6 Q+ V. R) f" a* G* t0 [
    44. 8 \, R" ?, Y5 u3 K, J7 `0 s1 ^4 s/ \
    45. def writeTxt(txt,outPath):
      & I$ X. A0 t, C1 w7 U! V4 w
    46.     path="\".join(outPath.split("\")[0:-1]); Q& K$ a9 A: c' u& r
    47.     if not os.path.exists(path):$ [- k7 U  V& q2 o7 r6 J! A
    48.         os.mkdir(path)    # g: ?: U  ~) F' P/ W* c% R1 p$ W
    49.     try:
      2 o( q. ~4 Q0 R+ W3 {: k$ _/ k* r
    50.         f=open(outPath,"a",encoding="utf-8")( G8 M/ L1 |! v) o
    51.         f.write(txt)
      , v1 B( J% M8 K' z: H( A5 J
    52.         f.close()
      - T0 ~$ O- x; @2 d& ~7 B9 G
    53.         return True            % D/ w! e. `' U, w! U$ q! ^
    54.     except:
      6 Q/ B* m" @  R5 U6 B. e- j
    55.         print("写入文档失败:{0:}".format(outPath))! \4 x' m. c. Z" P2 q; x
    56.         return False8 G" a. Y+ f3 `7 o7 d0 k2 D9 }* E
    57.         #else:   #无异常时,执行
      4 o! c. y7 g7 x
    58.         #    return txt9 M# j7 `* |/ M/ O+ q" v, s. o3 z
    59.     #finally:    #无论是否异常,都执行0 f1 ?$ \, J& O' v- K9 _( d5 ~
    60. 6 J' W/ p9 `2 J
    61. def getfileName(fileList):( u% k& W/ Y7 N! L0 O: w8 o
    62.     '''
      ; K6 d! ?7 S5 t3 o
    63.     :param fileList:文件路径列表/ M2 j: I2 s& V
    64.     :return nameList:文件名称列表有扩展名
      & t9 W6 i  |' n- R8 y( M/ [
    65.     '''$ O% M% {, J/ z( d" `
    66.     nameList=[]
      1 m+ S! Q2 _; |: B7 L5 j: r
    67.     for fileName in fileList:* G# O, F* H+ s& R# z, Z
    68.         name=fileName.split("\")[-1]#提取文件名
      : i+ T" @' R$ ?0 O4 Z, d/ k9 {
    69.         nameList.append(name)" d4 f" P1 j4 S& ^. D( o$ `, F
    70.     return nameList
      ; P0 V2 l. Z: I

    71. % r! A2 L( u" G' {
    72. #显示重复的文件名,如果有重复文件显示重复的文件名称,并返回False,否则返回True
      3 M- F6 t) u0 i( I: E, v
    73. def showDupFile(nameList):
      6 J" Z% h6 v9 |6 R9 V+ K2 G+ |
    74.     '''! s+ r0 f" ~- _+ }; T3 [
    75.     判断是否有文件名相同的文件
      6 i4 l; C5 {+ g; d- `2 p
    76.     :param fileList:文件名列表,包含绝对路径
      9 y1 @2 U; ^9 T  u! e$ e
    77.     :return: 如果有重复文件显示重复的文件名称,并返回False,否则返回True8 G5 o) g( M" p3 g# S1 A
    78.     '''
      , f; c4 k% w! X' _
    79.     if nameList:    #如果文件名列表不为空
      ( h! H. A* q! K2 Z# @" j9 o3 Y0 m
    80.         nameSet=set(nameList)
      " M. i3 m. I  p2 J6 |; F4 h
    81.         DupNameList=[]( }2 t3 ]: o1 D( O3 C
    82.         for item in nameSet:
      ( N. [! ]' i. r; u
    83.             if nameList.count(item)>1:
      8 c$ a- R( ~- J! ?: P6 |/ M8 D8 ~
    84.                 DupNameList.append(item)- A0 W% p( H5 A% T; O" v7 P
    85.         if DupNameList:#保存重复文件名的列表4 e( ?% e- _! k
    86.             for L in DupNameList:6 r+ m9 T: o& n  S* y
    87.                 print("{0:}为重复的文件,请处理!".format(L))
      ; B: f) m% e! J/ @; W6 u
    88.             return False9 S; R7 n. ]" K: b
    89.         else:( M, K9 r+ K/ H8 r4 G% J2 @5 X
    90.             print("没有发现文件名相同的文件,处理中...")
      % C- Z0 \# f2 E# U
    91.             return True% P: D% v! n% L: s6 |# @  o0 S! f; R
    92. % p8 h# p& U, b3 n! B8 w+ g0 H
    93. def nameListSort(nameList,rev=True):
      9 F( ^4 {( Z: i% T
    94.     '''
      9 B( V: r. O' y5 N& @: j) d0 R: b
    95.     按照字符串长度排序, x/ N( Z6 |1 @- z" U
    96.     :param fileList:文件名列表4 }3 N) S: \7 }: O3 A
    97.     :param reverse:默认降序" p$ ~3 O; i# i& Z: Z- q
    98.     :return newNameList:返回排序后的文件名新列表
      , l3 ?7 g' O* e! C/ V& T
    99.     '''
      . j9 b4 u" X+ n: }: B; @- I
    100.     newNameList = sorted(nameList,key = lambda i:len(i),reverse=rev) #按照字符串长度排序,降序
      * F, f  V0 A, W( S7 a, S
    101.     return newNameList   
      $ T7 f( x7 q& m9 F2 w

    102. + f2 H$ U! f" O% {
    103. #添加超链接% \% ^% J  {5 s- v2 b
    104. def formatTxtHref(nameList,txt):
      & U' o& N/ C) s. ^* l
    105.     '''
      - C3 K7 T% k: x3 J2 @% H/ w
    106.     func:在文本中为特定字符串添加超链接. R( [3 L! x  E6 h( T! m) D
    107.     :param hrefStr:待添加超链接的字符串
      ) Q5 P  b8 E! x4 {& f. B
    108.     :param txt:文本字符串6 H! L1 x) I# _" V* R) Y! d2 }& z5 {
    109.     :return txt:格式化的文本字符串
      & k2 |- J! [' X) f, G
    110.     '''
        ~! P  I' _& ]( \, u- S
    111.     print("\n开始循环添加超链接关键词辅助标记:")& B7 g' f' r+ S* B
    112.     count=0
      ! f9 |: T1 q- p! `" K3 d
    113.     nameListDescend=nameListSort(nameList)8 R& M* L; `: `0 J  e
    114.     for nameD in nameListDescend:0 d. w/ T5 W0 @: n# g
    115.         nameDSimple=nameD.replace(".txt","")
      " O, E5 g: B  E  x' q; V- w
    116.         nameDSMarked="【@"+nameDSimple+"@】"4 N9 w: g3 X- k0 F* Z' Z
    117.         txt=txt.replace(nameDSimple,nameDSMarked); k" v, z5 p9 @$ k9 u; Y
    118.         count=count+1) Q6 f* y+ u9 e1 |$ F0 \
    119.         print("\r已完成第{0: ^6}个".format(count),end="")     - [7 m; Z. x- U  Z$ l& r6 s& [2 O6 U

    120. ) x/ v" j4 N/ w1 V% X5 K: D
    121.     print("\n开始循环清理嵌套的冗余的超链接关键词辅助标记:")/ F- p1 J5 D% Q5 g" @* p( m5 q
    122.     count=0: R  L1 ?/ I$ x3 ?: j
    123.     nameListAscend=nameListSort(nameList,rev=False)
      # B4 w% d9 d8 t
    124.     for nameA in nameListAscend:! P& z# e& T! X5 h0 J$ i+ |) V# F  B
    125.         nameA=nameA.replace(".txt","")
      5 |6 R* \- C" F' [5 Y$ A1 s
    126.         pattern=r"【@([^@】]*?)【@{0:}@】".format(nameA)        
      1 O2 }" q3 H8 X/ e0 e, M/ [
    127.         patternObjTxt=re.compile(pattern)* u* u+ D9 J8 Y( d$ Z3 }
    128.         toHrefStr="【@"+"\\1"+"muyubug"+nameA! s  |0 m7 F* a+ H* P
    129.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串4 F: ~/ \$ ^8 i  }7 }! K
    130.    
      5 ^8 H& d( f: e4 N
    131.         pattern=r"【@{0:}@】([^【@]*?)@】".format(nameA)        ! r7 v" Z8 I$ G5 u+ b, k2 C. n
    132.         patternObjTxt=re.compile(pattern)- C9 F1 |* b0 v/ G2 \4 b- e
    133.         toHrefStr=nameA+"\\1"+"muyubug"+"@】"6 O& z" u* Q, q% c$ e+ Q5 D
    134.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串7 R3 R) n3 H0 ?2 ]5 ~+ K5 _
    135.         txt=txt.replace("muyubug","")* J8 R0 @/ C9 G6 P/ Q
    136.         count=count+1! d1 ]4 C" s9 H. d% Q7 \
    137.         print("\r已完成第{0: ^6}个".format(count),end="")
      % g: e' J" a- r- M, d  V
    138.    
        a. x  }4 o& F9 D: x  y# B8 C
    139.     print("\n开始添加超链接,") # W* r: Z* x4 ?' v6 G5 `
    140.     pattern=r"【@([^【@]+?)@】"7 r1 _7 a+ o# I8 e" n
    141.     patternObjTxt=re.compile(pattern)$ n* n, X& G7 B
    142.     toHrefStr=r"<a href='entry://\1'>\1</a>"  K. m* i8 M( x* l' m
    143.     txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      : ~: F7 N8 R6 D
    144.         " L0 ], H( ?% U; H
    145.     print("开始清理辅助标记,")
      * p9 M: v  D: f! h/ d  X
    146.     txt=txt.replace("<@>","")
      / E3 z8 }5 ~/ o9 b. V5 |; p
    147.     return txt( I* J: B# |2 ~7 N5 l
    148. # \- u# `$ N$ G. p% o" L
    149. def formatText(fileName):0 {3 O  y: x3 }5 S8 b2 H, g$ G
    150.     '''8 G. \1 R9 L/ W. a6 w2 M/ j( ]
    151.     func:清洗字符串,格式化; a% o$ N& F4 i! I7 P
    152.     :param fileName:待处理文件- T( w/ p9 g. @- C
    153.     return txt:处理后的字符串
      2 ~7 Y# G  e6 ^0 s" R* e
    154.     '''; K4 P* {6 g: Y* t% I1 G# M& Y
    155.     #提取文件名6 ~* {) r) a5 I/ p! ^
    156.     name=fileName.split("\")[-1].replace(".txt","")* m3 B9 F% j% ?$ F' F. |/ W
    157.     #在文件名的每个字符键添加标记符
      ' T& Y$ S1 e1 S! E" J
    158.     pattern = re.compile('.{1,1}'): P# E: _6 ]% G4 f
    159.     matchCharList=pattern.findall(name)
      ' F0 J, ?; T' u' [3 r" `- e
    160.     nameMaked="<@>".join(matchCharList)
      # k: q1 v- _" Q* M# a/ p
    161.     #生成标题部分7 X3 ]3 Q! @  b# a# z
    162.     txtTitle=nameMaked+"\n"
      ! g! ]  V* V( y8 `) b
    163.     #读入文件/ d0 b- C) b' J8 S- i  k
    164.     txtContent=readTxt(fileName)            
      " a0 S: O" b1 w, I
    165.     #替换正文中的特殊字符$ W3 r5 v; g% c$ P
    166.     strList=["\n","<br>"]    ' m1 ?; K) i2 w8 L  U6 t
    167.     for ch in strList:! H; O) o; |2 J! w
    168.         txtContent=txtContent.replace(ch,"<BR>")
      : d$ O9 n( N4 a4 }3 G$ @$ B
    169.     #合成整个词条的内容
      - w! K% ^$ w1 L
    170.     txt=txtTitle+txtContent+"<BR>\n</>"* t' c1 Z& D; y! `
    171.     return txt
      5 E. ~- y4 c3 R( L, c  E+ d
    172. 5 }+ }  ^( s6 T$ F1 r
    173. def mdxFormat(path,outputPath):
      2 s' W& E0 [' E- j
    174.     ''') a% _7 J  {  M4 A
    175.     func:格式化文本
      - l: A, z, ?% J- U3 m
    176.     :param path:待格式化文本的路径
      8 e" R( v2 k3 B
    177.     :param outputPath:输出的路径和文件名) c4 Q3 M0 G) R% }8 L9 }! k
    178.     ''', b" Z2 I4 S' z; j! ?! l) K/ `
    179.     fileList=getFileListAll(path)#获取指定目录下的全部文件,包括子目录中的文件( T* z/ i* x& O) ~3 P
    180.     nameList=getfileName(fileList)
      ' t' L3 W% o$ Z
    181.     if isTxts(nameList):5 ?1 T+ f( i  ?
    182.         if showDupFile(nameList):#如果没有重复文件/ \& ?% Y( [8 l6 l3 @4 ?# w  D
    183.             print("找到了{0:}个txt文档,".format(len(nameList)))
      ( @/ t8 s0 I/ f
    184. ! Z2 M! P' }! W# ]
    185.             print("开始格式化、合并文档:") 2 o0 q( N0 n7 c7 O) ]8 Y$ h: ~
    186.             count=0#txt文档数量统计- M. u! n, s: @3 b/ x$ o  ?/ K5 e
    187.             txtList=[]#存储文件内容
      + d/ O5 k, M1 s4 f9 D9 B; h
    188.             for fileName in fileList:               
      + ]& r$ b) t& q  X! G
    189.                 txt=formatText(fileName) #转换换行和<br>为<BR>                  
      ; @: ?4 G" J( _- l. [
    190.                 txtList.append(txt)  p5 G  J1 Z6 ^. v, O
    191.                 count+=1  c8 o! T, `7 E/ l' r5 X
    192.                 print("\r已完成第{0: ^6}个".format(count),end="")                   ) u# _+ ?" f1 o: E' L, Y# n6 l. T2 L
    193.             txt="\n".join(txtList)
      - O- g' L7 r! v1 t- `
    194.             
      $ _# Q. N3 N! h! c0 r6 i  ]
    195.             #添加超链接
      6 B# r3 S* V1 m; ?
    196.             txt=formatTxtHref(nameList,txt)
      - p4 o) g7 c( N2 G) c
    197.             print("开始写入文本,")
      , P  F/ D) ]; z% [: R
    198.             if writeTxt(txt,outputPath):) [( ^6 K$ w& U) _8 ?7 i5 O- y+ H9 o
    199.                 print("文件合并输出成功!"); C/ P* Y% ^4 c- ?( j, j* V
    200.             else:$ Y+ K# k% S% _6 `% T4 u
    201.                 print("Error:Merge!")
      ! o0 z7 n; ^( T- t% F
    202.                 return  0 R9 U+ V8 G2 X
    203.                 ! n, C9 Q. s( G8 m# K+ m, D
    204. def main():" T/ U, r  m. {* e' d
    205.     timeStart = time.time()+ @% S7 H% A4 p* w3 M0 G
    206. 0 `& o$ T$ }4 w5 d3 r: I5 U

    207. 8 Z$ l- H3 k: p

    208. # {& Y  F7 c* [5 n$ }
    209.     path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
      5 ?6 k, M8 L( ^/ K# ?
    210.    
      " b; v; D+ ~! ^9 I9 K- C9 b& _
    211.     outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"2 N* I( Z+ n  D/ r5 S
    212.     & f9 B; B; [, M" z' \
    213.     mdxFormat(path,outputPath)
      * j+ @- Y, l1 G6 ^* l) j
    214. ! u3 W5 X! `* k' U, L! k
    215.     timeEnd = time.time()# t+ j+ }; ^- [5 h2 `0 N
    216.     print("程序运行了%d秒"%(timeEnd-timeStart))
      - n+ F1 l$ _' V+ f: Y

    217. ! e9 V. L/ \0 h  O
    218. if __name__ == '__main__':0 c. d# J" [% r. L! Z, j6 ]# \
    219.     main()
      ( B/ l' G' t* p" y( e/ T& q' p+ ^
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-7 19:54:52 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59, g& d, a( w. C3 @2 r0 |7 R& R
    好的!!  麻烦了
    ! @3 k# V) [) w: X( y' ]5 I
    你修改了哪条?

    该用户从未签到

     楼主| 发表于 2021-10-7 21:48:13 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    ( k+ B) M% }! h; R: W好的!!  麻烦了
    5 z$ Z  f9 V9 I: Z$ P
    path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"2 x4 w" k5 Y/ O. [% B/ D
    outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
    * U/ z+ [5 E. y这两条有问题吧,应该是下面这个格式
    : h" D% N) _$ \8 Z9 mr"D:\U盘同步\百科\00txt词条汇总"
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-8 07:10:18 | 显示全部楼层
    muyuzhth0 发表于 2021-10-7 21:48* W& _+ B' w8 g4 D0 F* x2 s
    path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"7 x( w  i$ x! q2 b4 C9 Q4 U
    outputPath=r"/Users/vivian/Downloads/md ...

    4 |( B+ v! Y$ o  G- Z& ~5 j" q5 x我用的是mac电脑, path 是放的存放txt词条的目录 , outputpath 是输出的txt文件
  • TA的每日心情
    开心
    2022-1-20 19:27
  • 签到天数: 157 天

    [LV.7]常住居民III

    发表于 2022-2-18 10:09:24 | 显示全部楼层
    弄个windows操作界面该多好

    该用户从未签到

     楼主| 发表于 2022-2-18 19:10:21 | 显示全部楼层
    lixiaoshun 发表于 2022-2-18 10:09* j, t3 ?* Y& L5 |
    弄个windows操作界面该多好
    * r( M* _8 ^5 y5 d
    sorry!算法还不完善,需要的人也不多,空闲时间比较少....暂时没有写GUI的打算
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-6-8 06:47 , Processed in 0.092922 second(s), 15 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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