掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 882|回复: 16

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

[复制链接]

该用户从未签到

发表于 2021-7-25 10:47:05 | 显示全部楼层 |阅读模式
本工具适用python3.9.5编写。可以把指定路径(包含子目录)下的txt文档格式化为mdxbuilder使用的格式(每个词条三行:key,value,</>)。2 M5 Z3 H1 J( T4 P
特点:2 @9 C5 q. q0 A, @# N9 H
1.支持不同编码格式的txt文档,默认输入输出均为“gbk”编码。, C% L; g: M7 I) F. _
2.我写这个工具是为了整理个人的常用资料,为关键词添加超链接,实现跳转。( k+ Z# U0 h6 t. ^' x, @
ps:我以前一直使用其他人写好的程序格式化txt文档,但是如果关键字之间存在嵌套,超链接格式化有问题,所以我自己编写了这个程序,但还有一点不完美之处,就是不能很好的解决自身跳转的超链接。望大神指点!
  _4 ^  i. T( ~( d5 A
, ~8 `: G' c/ ~0 T0 Q5 N0 U

本帖子中包含更多资源

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

x

评分

1

查看全部评分

该用户从未签到

 楼主| 发表于 2021-7-26 12:34:25 | 显示全部楼层
n0thing 发表于 2021-7-26 02:18' u6 x/ _. R9 W2 T9 d4 O8 A- @+ L
能不能發一個 .txt 的範例?

, N# P( Y9 v$ P" B* Ctxt文档的文件名为关键字、文件内容就是词典内容。
0 @4 H' `! ^1 l* w8 z: |# C, V
" f: w! n5 _8 b3 W8 L; }我主要为了实现资料间的超链接跳转。

本帖子中包含更多资源

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

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 编辑 5 r3 l- S& [& o: A% z% C& J  {! `8 D
    kyletruman 发表于 2021-7-25 11:586 _$ M% s# M  p0 E! I: n5 s3 l4 Q& e# [
    能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊

    , b: c  a8 \# {) z8 h
    3 H- O* l. P  A1 ^- 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 编辑
      p5 y, l7 i7 _5 s5 I2 o/ L* v1 b% R' _0 M/ w
    输出默认是gbk
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-6 20:16:02 | 显示全部楼层
    我的版本是 3.9.7  , 遇到了问题 。请帮助 9 |& N" ~2 n/ \  p' O8 E- i
    6 C: v0 A1 s" T* }
    1. ❯ python mdxFormat_upload_V3.5.py# G0 S! b& n0 V4 l8 A
    2. 没有发现文件名相同的文件,处理中...
      1 |( V: b" h) Z( y) A  }
    3. 找到了4个txt文档,1 u# V" j& N( h  n/ w2 i' {, \# A0 q
    4. 开始格式化、合并文档:, v' }4 C7 d4 F( Z+ i* s, `+ ~
    5. 读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/药品检查管理办法.txt" ~5 b5 n9 t' N
    6. 已完成第  1   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/我的广告法管理条例.txt
      8 q& B) e* c8 Y% Z1 G: M  T
    7. 已完成第  2   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/北京市反食品浪费规定.txt: q8 t5 x0 L) I! m
    8. 已完成第  3   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/中国共产党组织工作条例.txt: w( F, F# j: D4 h/ ?
    9. 已完成第  4   个, c2 l0 b$ B% y& n
    10. 开始循环添加超链接关键词辅助标记:) v7 Z- {. A2 L0 T, X
    11. 已完成第  4   个, z3 ~& z. {  L
    12. 开始循环清理嵌套的冗余的超链接关键词辅助标记:/ G0 [8 G' o) \
    13. 已完成第  4   个+ ?% d) Q2 }6 C% Q
    14. 开始添加超链接,8 |+ o* D8 v: w$ q0 A' q* h6 r7 L
    15. 开始清理辅助标记,( `% E! z5 C$ |6 y$ b3 ~
    16. 开始写入文本,
        t- k/ [* r5 i2 D0 S* l
    17. Traceback (most recent call last):7 F- w- K: C( U, p$ u$ X
    18.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 219, in <module>$ _# l4 F9 c$ y( W: g3 C* R4 V( |
    19.     main()+ Z$ Q/ G/ M7 [: j: u
    20.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 213, in main
      8 `$ ?/ q. L* t3 A
    21.     mdxFormat(path,outputPath)
      ( }0 J6 x1 m; K- b
    22.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 198, in mdxFormat
      7 g: x" T( ?5 v, z
    23.     if writeTxt(txt,outputPath):
      % s4 F. W1 m. M' B% F+ V
    24.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 48, in writeTxt
      9 x7 D6 G- L$ @3 {5 V1 C9 V
    25.     os.mkdir(path)
      $ [. u# _  Q: U' @0 ^
    26. FileNotFoundError: [Errno 2] No such file or directory: ''
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-6 22:34:08 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:167 W$ j( N' D. G% {* I- B1 T
    我的版本是 3.9.7  , 遇到了问题 。请帮助

    ( f* D% v* |( x/ F4 AmdxFormat读取文件的路径是绝对路径。你得在mdxFormat_upload_V3.5.py-中设置下文本文件的路径。有个变量“path”

    该用户从未签到

     楼主| 发表于 2021-10-6 22:47:27 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16
    ! U* F& z  |& A0 N5 F我的版本是 3.9.7  , 遇到了问题 。请帮助

    2 y* }1 M, A( l; M你把在“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:471 w' T1 J  A: ^
    你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。
    + {! R$ x) V  ?6 A
    好的!!  麻烦了
    * O: ?- j' g- F8 V* f% _. V( _  c% C% A6 x( Y% r) z4 x6 d
    1. import os
      0 j9 d& n" Q2 b! s! }. k& C
    2. import glob
      2 l* ^1 i6 Z+ o5 T4 `% s( D0 |
    3. import re
      " q# C' l( [8 \# D4 X! j" f
    4. import time
      9 J  S  t: V% V; q2 t
    5. . v; Y+ T5 h6 c
    6. #遍历所有子文件
      ( P% V* O5 z# I7 }4 n' r3 j# B2 e  t
    7. def getFileListAll(filePath):
      0 L/ E  o+ f& n, |+ J  o2 |$ H
    8.     filelist=[]
      0 F) j4 j0 q+ i  O2 {" B6 V1 ~
    9.     for root, dirnames, filenames in os.walk(filePath):! l5 P% q- q; ^% ?0 \/ J, f
    10.         for filename in filenames:! ^! D( D! q8 u# z/ y+ t) \
    11.             filelist.append(os.path.join(root,filename))
      2 i2 C: ^1 @) n& W! o2 R! V/ [0 H
    12.             #print(os.path.join(root,filename))
      7 k  H" t) ~) ]; ~% s
    13.     return filelist. _- [! J9 n: _7 Z$ \4 ~
    14. ' |1 R; S; K; ~& ?3 c% ]
    15. #判断是否为txt文档2 b/ y" U( `4 u* F6 `1 h( Z1 n
    16. def isTxts(nameList):: a: M: R" r0 ?, G* M
    17.     pattern=r"^[^~$].+\.(txt)$"   
      4 ^2 {5 [3 @$ A7 H2 Y
    18.     patternObj=re.compile(pattern,re.I)
      ! `, @- A9 {( K
    19.     notTxtList=[]' {# @1 w; G# r! Z8 i
    20.     for fileName in nameList:   V" {& @1 c* J4 [. C# u
    21.         if not patternObj.fullmatch(fileName):   #判断是否为txt文件   
      & W$ w) B/ b0 H
    22.             notTxtList.append(nameList)
      ( P$ X' g: A: N, b8 s
    23.     if notTxtList:
      6 d  M& C% H; {. w; n% f4 u! L
    24.         print("存在非txt文件:{0:},请处理后再运行程序!".format(notTxtList))
      4 p! L3 g1 s; U8 f8 S* K
    25.         return False
      9 P1 g, U6 `+ W6 r* J5 _! I! T
    26.     else:' n" C4 i6 g; z5 c" o, B% O, f! D" k) P
    27.         return True   
      % e% ~3 ?8 d0 m5 p  T' r

    28. 5 \3 l4 F7 @4 M8 ?, Y, |& Q5 `
    29. #在指定的txt文档中查找关键字
      2 ^% @4 t% @% g0 j: G9 J( z
    30. def readTxt(fileName):#strkey:查找的关键字;fileName:文件路径
      / N4 A% k2 w' k" M8 e; g4 b, d4 g
    31.     pattern=r"^[^~$].+\.(txt)$"   
      $ ]) H+ n7 g& M# \) \& L& @  H
    32.     patternObj=re.compile(pattern,re.I)
      ' d$ x' }3 _7 [7 d2 z
    33.     if patternObj.fullmatch(fileName):   #判断是否为txt文件            
      5 R9 l& f3 q$ j5 J: W
    34.         try:8 C9 C" s2 k8 m0 m
    35.             f=open(fileName,"r",encoding="utf-8")
      5 @+ C1 B& W8 l' u! E9 S
    36.             txt=f.read()* C( m, D* V! R; z0 L
    37.             f.close()            
      1 U8 q  ^  O+ ?" y- n6 w
    38.         except:6 F, F* ]) ~$ K& ^: O" I
    39.             print("读取文档失败:{0:}".format(fileName))) s9 `! P2 e5 O
    40.             return ""            
      8 R. j2 C: Z& |0 i
    41.         else:   #无异常时,执行
      - ~9 m- c# z. P' F, ?# o- ^' @6 M
    42.             return txt
        o8 X* n& G8 N
    43.         #finally:    #无论是否异常,都执行7 L8 s5 ?  c/ u5 q

    44. ! ~+ H) G' T& D  r8 |
    45. def writeTxt(txt,outPath):
      ; `9 B! W2 z* I
    46.     path="\".join(outPath.split("\")[0:-1])* {4 \/ i3 w' Q( `  z
    47.     if not os.path.exists(path):
      # f7 i+ j, Y& a% k* T% [
    48.         os.mkdir(path)    4 w2 _1 m' h& u6 Q# l# y% m; `
    49.     try:
      & F* V/ K5 P+ N: N3 d
    50.         f=open(outPath,"a",encoding="utf-8")# b9 ]6 A7 |8 k. c0 `5 C5 W3 i
    51.         f.write(txt)- t  t4 S) {# g
    52.         f.close()
      . f! `& w8 f# ^2 f6 p
    53.         return True            7 m# J% J" n2 v8 Z1 B2 ^. U
    54.     except:
        Z: k5 @1 ?* W: S9 W% ]/ ~
    55.         print("写入文档失败:{0:}".format(outPath))$ R! s# c) C/ S6 c( L
    56.         return False* O. n9 x! A* n- j& t8 s  J
    57.         #else:   #无异常时,执行
      ! [4 z. B* k  c; x+ Z( a
    58.         #    return txt' n4 }: j( Q/ P+ V2 Q
    59.     #finally:    #无论是否异常,都执行
      3 c; M* ]: G; |9 j% I4 i& V

    60. ( x$ U& s5 n8 m/ a
    61. def getfileName(fileList):$ s/ B5 P  d; v
    62.     '''5 Q+ b& O, @# @+ r7 ?  ~% n; r7 T: k
    63.     :param fileList:文件路径列表
      4 _, B4 P1 U$ s/ Q6 g
    64.     :return nameList:文件名称列表有扩展名
      * z* S4 e# M$ {  v0 O
    65.     '''
        ?4 y* t. O- w6 W8 @% i/ `
    66.     nameList=[]
      , ^& U1 R5 ^% A; V% n0 `5 P
    67.     for fileName in fileList:8 f4 \4 N1 s, V9 m1 v
    68.         name=fileName.split("\")[-1]#提取文件名
      # ]% c* ~3 M$ b! K  R& v) V4 n2 b
    69.         nameList.append(name)3 T. G  A3 q$ p5 u- w
    70.     return nameList
      . F, x8 K: P) D. L$ o2 y7 `! L/ {
    71. + W3 x& i% B. W
    72. #显示重复的文件名,如果有重复文件显示重复的文件名称,并返回False,否则返回True" f% N( w7 G, h# O4 c2 Y: E) f
    73. def showDupFile(nameList):
      $ a/ g+ R, \6 P/ ~2 C; b& c
    74.     '''
      " m- D. c; U# B% k2 o+ S$ V
    75.     判断是否有文件名相同的文件
      0 R$ _1 v. O1 V+ s6 v! O, [
    76.     :param fileList:文件名列表,包含绝对路径
      + }4 K5 j- l: s# F$ U4 f5 w7 X
    77.     :return: 如果有重复文件显示重复的文件名称,并返回False,否则返回True
      2 {( W$ O0 Y, h" w: p2 P$ U
    78.     '''
      ) c- @3 n$ m" s2 O2 r
    79.     if nameList:    #如果文件名列表不为空
      % ^  i2 n( y0 B% B5 k
    80.         nameSet=set(nameList)
      ! A% a5 U5 h' o; \+ t7 W, m
    81.         DupNameList=[], m6 ~! Z7 K' Z# D
    82.         for item in nameSet:& K+ c* P0 t' O
    83.             if nameList.count(item)>1:
      1 J' H! {0 Y5 w2 l
    84.                 DupNameList.append(item): d5 C3 C0 k4 q; c5 q6 p
    85.         if DupNameList:#保存重复文件名的列表
      + ]% |; c$ f& l9 E# w- t( p
    86.             for L in DupNameList:" F. B! U# x* O0 X
    87.                 print("{0:}为重复的文件,请处理!".format(L)) ( R1 D: {$ g3 W2 Y
    88.             return False
      8 \, |2 U" L0 N) L
    89.         else:3 J: Q  V7 u1 R8 w& a& _0 ^, n7 \2 b: c
    90.             print("没有发现文件名相同的文件,处理中...") " k" E2 t( u: b# [
    91.             return True
      ) v/ |# \' _6 q! s
    92. 5 ^- v% i7 {2 q/ x
    93. def nameListSort(nameList,rev=True):( k* ?! C0 h& C0 B9 o# w/ V
    94.     '''
      ' D" U& J, \8 ^
    95.     按照字符串长度排序) N: Y: ~: G5 K* C
    96.     :param fileList:文件名列表9 l) ]6 M' C, [6 g( {6 P9 J6 h. y1 M
    97.     :param reverse:默认降序
      + j2 R7 [$ D) N" X9 x
    98.     :return newNameList:返回排序后的文件名新列表
      % q  U9 z0 o, {& P
    99.     '''
      / `$ J! S, q3 Y3 g6 Q4 ^
    100.     newNameList = sorted(nameList,key = lambda i:len(i),reverse=rev) #按照字符串长度排序,降序5 M: q7 w6 G8 H4 [( Z0 o$ M9 ~+ A
    101.     return newNameList    1 Q) J3 K, W% b/ i' V

    102. % @; p% i' ]" ]/ T4 v* U5 }+ S
    103. #添加超链接
      ' u$ `& C6 b& @! }; `: u  \6 I
    104. def formatTxtHref(nameList,txt):- [7 _- j+ z5 c3 b
    105.     '''
      , {4 a% b8 x1 O) T
    106.     func:在文本中为特定字符串添加超链接+ K0 \, X- d! e6 |6 o' l
    107.     :param hrefStr:待添加超链接的字符串
      1 O" z" P1 n; J6 }
    108.     :param txt:文本字符串+ D4 ]& E: \' s
    109.     :return txt:格式化的文本字符串
      + \7 W  K2 {1 \" x" J2 I& z
    110.     '''8 W- A4 v# n$ P5 u% \# A
    111.     print("\n开始循环添加超链接关键词辅助标记:")  _% R% K6 p. |# E# t1 `% j* p
    112.     count=0  d2 s  n! u6 s) q0 V9 d) T
    113.     nameListDescend=nameListSort(nameList)0 [$ r  r. v" }4 Z7 b
    114.     for nameD in nameListDescend:
      ) H, n9 B0 H# M2 C9 f& {0 O* V
    115.         nameDSimple=nameD.replace(".txt","")
      . {  _$ ^: V) M, \. n6 [
    116.         nameDSMarked="【@"+nameDSimple+"@】"
      ' S; \, M) e( h" r+ `: i
    117.         txt=txt.replace(nameDSimple,nameDSMarked)+ V2 L  q: Z4 }
    118.         count=count+1* i' Z4 x4 }7 Z0 x% m( C* w
    119.         print("\r已完成第{0: ^6}个".format(count),end="")     9 C4 o9 d) y  h( Q/ T0 M+ Q

    120. ) o' |+ K/ l# u1 a1 j, N
    121.     print("\n开始循环清理嵌套的冗余的超链接关键词辅助标记:")2 Y# l" s$ H' S
    122.     count=0
      ' j* e! ?9 P6 R' m, V. }5 q
    123.     nameListAscend=nameListSort(nameList,rev=False)* b/ I  u0 A" ~
    124.     for nameA in nameListAscend:( b4 }  n9 |2 h6 b  W9 I: n: B
    125.         nameA=nameA.replace(".txt","")
      " \+ q  ?5 @/ Y5 {
    126.         pattern=r"【@([^@】]*?)【@{0:}@】".format(nameA)        
      % a' _% g" F9 G* \/ U( ?
    127.         patternObjTxt=re.compile(pattern)4 p# s/ k: J: u
    128.         toHrefStr="【@"+"\\1"+"muyubug"+nameA
      " [9 t, k% V3 k$ \
    129.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串. E- |7 n  n; p: R: Q- A
    130.     + I  [- s3 Y9 x' ?: ~0 x
    131.         pattern=r"【@{0:}@】([^【@]*?)@】".format(nameA)        ' h' K' C, |) l% y6 Q) Z& j
    132.         patternObjTxt=re.compile(pattern)/ w6 ]  w& S5 L: c* p
    133.         toHrefStr=nameA+"\\1"+"muyubug"+"@】"
      0 H, {1 F# z% ]3 i: K+ c
    134.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串5 T, M. t, G! I% ?( {0 Z6 g" m; [
    135.         txt=txt.replace("muyubug","")2 G$ N) {2 e# v! Q* e# q$ l/ J! P
    136.         count=count+1
      $ r) j: j2 n+ W3 H+ h# x2 J2 h4 u6 G5 z
    137.         print("\r已完成第{0: ^6}个".format(count),end="")! |: [+ V3 V6 m, l9 v
    138.    
      + l4 L8 e1 Q7 C- Q5 q
    139.     print("\n开始添加超链接,")
      . D8 n: N! B' k2 S& ^0 N
    140.     pattern=r"【@([^【@]+?)@】"
      3 O9 C0 x5 a& j- R! m% d
    141.     patternObjTxt=re.compile(pattern)
        K7 G- I* H8 X; Q: n3 X
    142.     toHrefStr=r"<a href='entry://\1'>\1</a>"" t7 F0 q$ M: W8 B
    143.     txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串* [5 c1 Y& X& L3 i9 F, X2 s
    144.         9 H: w) [6 }+ M. S/ k/ E; r8 ]0 ~- o
    145.     print("开始清理辅助标记,")
      ; n; S- E, t. `1 T  _7 P+ o
    146.     txt=txt.replace("<@>",""): W6 g" Y3 O& S/ m
    147.     return txt
      5 C9 }. P; B7 D8 D8 z3 c

    148. 8 K, c6 V( J  m6 t& J  c
    149. def formatText(fileName):2 W1 R. f( e1 [& F
    150.     '''0 T5 _7 O1 J9 F5 m' I( q
    151.     func:清洗字符串,格式化' J/ @8 b; S8 b, b7 X
    152.     :param fileName:待处理文件
      2 S% b. Y) n* G1 y
    153.     return txt:处理后的字符串  ]  r* W$ X8 T7 Z+ t
    154.     '''
      # B; y. p. f$ N, q2 W3 G; l3 q
    155.     #提取文件名
      , q, J- C1 B9 |; s/ X. f
    156.     name=fileName.split("\")[-1].replace(".txt","")# i6 [1 g4 U6 K( Q
    157.     #在文件名的每个字符键添加标记符& ]2 G6 Y$ ?/ G$ O2 [0 W- R  ]
    158.     pattern = re.compile('.{1,1}')
        p" n0 W. W# v0 a
    159.     matchCharList=pattern.findall(name)0 a6 Q& ]) q9 r  Q/ O" I1 a& y$ O
    160.     nameMaked="<@>".join(matchCharList)3 @+ t4 T& \9 \) b& p& o
    161.     #生成标题部分
      - O5 W: Z8 ]% r$ X) ]5 R
    162.     txtTitle=nameMaked+"\n"
      ( w  K( R3 S' z0 q0 L2 s5 K
    163.     #读入文件
      * @( D. }! T& y
    164.     txtContent=readTxt(fileName)            8 N# g- @4 I8 |% q2 _+ \
    165.     #替换正文中的特殊字符$ k2 Z2 c$ y% e
    166.     strList=["\n","<br>"]   
      - @$ p3 v& h, t4 q9 w
    167.     for ch in strList:
      * F6 ]6 y5 `- u7 Q+ W0 n4 d
    168.         txtContent=txtContent.replace(ch,"<BR>")
      ! K3 Z0 |9 q1 b6 D$ _+ F; h, P: j
    169.     #合成整个词条的内容
      6 }. y1 m; u! W! D
    170.     txt=txtTitle+txtContent+"<BR>\n</>"
      " i; _! q" V! f* R  k$ |% `
    171.     return txt3 G9 t2 s  q' `0 _1 h  Y+ k

    172. 0 J* {' C, q6 b/ ]  `
    173. def mdxFormat(path,outputPath):- ~# _& {) K3 ]9 ]
    174.     '''
      . q) V+ \" B5 B% i  C3 _, `* T
    175.     func:格式化文本! U" g7 y# n5 @) M/ l* r( Z
    176.     :param path:待格式化文本的路径0 t8 a% X& @. r, ?
    177.     :param outputPath:输出的路径和文件名! m, Q+ j1 N+ _4 t& g0 \' Y: ^
    178.     '''
      / w$ G/ S( p9 G
    179.     fileList=getFileListAll(path)#获取指定目录下的全部文件,包括子目录中的文件+ y2 `& `4 ^: m8 _: S3 ~/ b8 [% U6 f
    180.     nameList=getfileName(fileList)0 l  g/ P! g4 F& C* L9 m
    181.     if isTxts(nameList):1 r! F  M0 E- D! W6 F6 @8 E8 C  z
    182.         if showDupFile(nameList):#如果没有重复文件! e- x0 S$ R& X. j/ T
    183.             print("找到了{0:}个txt文档,".format(len(nameList)))
      . a  U0 l* u: ]
    184. 5 j2 _' m0 P0 S
    185.             print("开始格式化、合并文档:")
      + {% V4 M; ~( R  f/ k0 J
    186.             count=0#txt文档数量统计! h- g9 d- I$ u, m- D
    187.             txtList=[]#存储文件内容1 e9 j2 k% L# Z" i  u
    188.             for fileName in fileList:               
      ( O6 T& _, }1 M4 f9 H
    189.                 txt=formatText(fileName) #转换换行和<br>为<BR>                   . B' U1 l* d, J
    190.                 txtList.append(txt)" s% `) k" u" }! _% |
    191.                 count+=1* f3 e0 j! B- v& }9 K8 o
    192.                 print("\r已完成第{0: ^6}个".format(count),end="")                  
      8 b4 F, P- ~0 ^% T; o* L
    193.             txt="\n".join(txtList)
      * X2 q; m$ ?9 z7 n4 T
    194.             
      ( {# ~7 t) [$ h% e* _0 Q8 C  E
    195.             #添加超链接! \0 r5 }' G" o. s
    196.             txt=formatTxtHref(nameList,txt)
      $ K. o5 q, }3 t" R1 @9 r3 T
    197.             print("开始写入文本,")
      ' Y5 Y& M! W" @$ j
    198.             if writeTxt(txt,outputPath):
      # D$ p4 Q8 Y! r2 A
    199.                 print("文件合并输出成功!")
      7 S/ x% {4 P$ X; u# m. K
    200.             else:8 h& S" W% R- c# G: i1 ?% a. r, @
    201.                 print("Error:Merge!")
      9 d' L# J1 y' `/ J6 X4 {4 F
    202.                 return  
      8 i: [( c8 _) c9 ?" P! A" o
    203.                
      + h5 {; a: j4 ]% R  d. X$ h
    204. def main():
      ; Q' t9 s. s/ n- k: @. ]6 @
    205.     timeStart = time.time()
      ) g# z1 j8 }, `  I' N
    206. 0 o1 x. O0 B+ s2 k$ Y' M
    207. 1 ]6 c$ @( C# K7 G
    208. - G. I' d$ B% _7 ]% B/ u
    209.     path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
        D7 d- h, n( E7 {. Z
    210.    
      9 {6 u8 J0 U$ z5 E8 W$ V2 e! m0 y
    211.     outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
      " G$ G8 w) D; X5 \
    212.    
      ! V( G; a3 L1 X: K+ r8 G6 P9 |
    213.     mdxFormat(path,outputPath)+ ]" U7 N$ i. C1 ?7 l
    214. 2 Q9 L5 W2 @% S! d; u# A( G) f
    215.     timeEnd = time.time()7 ]. S( @0 L# j3 y7 n: u1 W: [
    216.     print("程序运行了%d秒"%(timeEnd-timeStart))& K) O$ p# e$ g+ F

    217. 6 t; w# ]8 G( _  V2 }9 d
    218. if __name__ == '__main__':
      " w0 k! H+ W' Z2 G8 x% q
    219.     main()4 r$ @3 t# Y! t3 s2 G
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-7 19:54:52 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    ! k% s" h9 k6 E4 u8 |/ t# o& I' B好的!!  麻烦了

    & X, s6 n2 j% Q! ?3 N7 l) N你修改了哪条?

    该用户从未签到

     楼主| 发表于 2021-10-7 21:48:13 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    ' c' L! o! ]) s0 c好的!!  麻烦了
    9 [3 v" m8 _' K8 q
    path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"# S& w4 m5 z% _* d- x" Z% a* C
    outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"- v; f1 b& q0 O+ W' ?- y' j( Y
    这两条有问题吧,应该是下面这个格式
    0 L0 L# \5 B/ ~8 ~; ^" sr"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
    5 ^  i5 q( K+ d, Lpath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test". T% E, m3 |" K9 ~8 I% h: I$ S
    outputPath=r"/Users/vivian/Downloads/md ...
    + A, t7 l3 d0 l' L0 t- F! A) J/ k7 o
    我用的是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
    ; F8 l2 K3 C/ X/ n1 v' j- o弄个windows操作界面该多好
    & d; {, f; \: G0 {
    sorry!算法还不完善,需要的人也不多,空闲时间比较少....暂时没有写GUI的打算
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-5-6 06:38 , Processed in 0.067472 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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