掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 883|回复: 16

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

[复制链接]

该用户从未签到

发表于 2021-7-25 10:47:05 | 显示全部楼层 |阅读模式
本工具适用python3.9.5编写。可以把指定路径(包含子目录)下的txt文档格式化为mdxbuilder使用的格式(每个词条三行:key,value,</>)。& d/ u9 Y- M' o
特点:
. [% N9 T2 S+ T7 c0 f) b  Z+ d1.支持不同编码格式的txt文档,默认输入输出均为“gbk”编码。5 G% T0 @5 P/ Z! X
2.我写这个工具是为了整理个人的常用资料,为关键词添加超链接,实现跳转。
( Q7 L! y  Z+ N2 F4 Y0 l% ]ps:我以前一直使用其他人写好的程序格式化txt文档,但是如果关键字之间存在嵌套,超链接格式化有问题,所以我自己编写了这个程序,但还有一点不完美之处,就是不能很好的解决自身跳转的超链接。望大神指点!
) W1 P0 }0 B3 f, N
+ x+ a2 @9 Y0 D" P# n" j/ M! ~9 e: Q

本帖子中包含更多资源

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

x

评分

1

查看全部评分

该用户从未签到

 楼主| 发表于 2021-7-26 12:34:25 | 显示全部楼层
n0thing 发表于 2021-7-26 02:189 K& o9 n1 K6 A
能不能發一個 .txt 的範例?

1 ^: T# e( y" E' btxt文档的文件名为关键字、文件内容就是词典内容。
, k- Z$ }6 _/ q3 o' f- w
2 L4 e( r% @7 _. y1 V! T我主要为了实现资料间的超链接跳转。

本帖子中包含更多资源

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

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 编辑 & A0 T7 h" L3 E' J+ q/ h+ K0 k
    kyletruman 发表于 2021-7-25 11:58
    % y5 Q8 \  B/ Q6 l能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊

    5 `" ~+ h% n2 X( B/ _% S1 v# {
    ! F- @) [& ]: }; ^$ H我制作的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 编辑 5 \4 _7 X, ^) J$ N

    ! F6 v7 D$ n# q6 V+ D输出默认是gbk
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-6 20:16:02 | 显示全部楼层
    我的版本是 3.9.7  , 遇到了问题 。请帮助
    * K* ]1 D3 c9 ]/ ?4 v5 E+ L0 R+ d  F( b  @9 A' O+ E
    1. ❯ python mdxFormat_upload_V3.5.py
        e9 z* p& ^% V: \  _
    2. 没有发现文件名相同的文件,处理中...7 w: @. r3 ~5 j, H1 B/ f
    3. 找到了4个txt文档,; R# L$ e' l" J, L6 J$ `3 `
    4. 开始格式化、合并文档:
      & @3 V1 x* ]& I  Y5 O
    5. 读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/药品检查管理办法.txt
      . V. Y3 N) t+ s
    6. 已完成第  1   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/我的广告法管理条例.txt! N  {* _% l8 c5 j+ _( Q: s
    7. 已完成第  2   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/北京市反食品浪费规定.txt
      2 {) z. A0 N( P6 A. P9 z
    8. 已完成第  3   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/中国共产党组织工作条例.txt) A- Z3 x" a+ r0 V7 Y& x
    9. 已完成第  4   个
      * K2 d$ L# Y' s3 F' s1 c% Y
    10. 开始循环添加超链接关键词辅助标记:1 D' D6 ~/ s8 K% f
    11. 已完成第  4   个6 G. k, n6 W! Z- n8 t" \
    12. 开始循环清理嵌套的冗余的超链接关键词辅助标记:& _* X2 X2 }, `
    13. 已完成第  4   个# j! `4 H1 U6 R! S
    14. 开始添加超链接,% w& Q- {, a" ^
    15. 开始清理辅助标记,. d7 x' W+ @* s! l
    16. 开始写入文本,' Z7 s4 Z4 H1 H* h
    17. Traceback (most recent call last):( {, r, j5 q1 r9 u- J; ?
    18.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 219, in <module>
      7 t# d7 k8 m9 `# y" V( A
    19.     main()( v6 H( I0 A- I+ L+ S
    20.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 213, in main3 |* ?% X; U; m+ {# ^0 ^; F
    21.     mdxFormat(path,outputPath)' K* u1 U, m: X( x7 v1 z: [
    22.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 198, in mdxFormat/ H6 ]  a; N+ ~/ l, c* y# v
    23.     if writeTxt(txt,outputPath):
      8 B8 ]6 v! L8 C* Q- p- r( \  E! o4 w
    24.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 48, in writeTxt
      ' [) `/ `$ U7 t& \; }
    25.     os.mkdir(path)
      ! ~0 I( f& o8 w' t, L
    26. FileNotFoundError: [Errno 2] No such file or directory: ''
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-6 22:34:08 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16; m. Q, r2 Q- J$ j1 p. X
    我的版本是 3.9.7  , 遇到了问题 。请帮助

    9 G2 ?4 v( D6 V+ [mdxFormat读取文件的路径是绝对路径。你得在mdxFormat_upload_V3.5.py-中设置下文本文件的路径。有个变量“path”

    该用户从未签到

     楼主| 发表于 2021-10-6 22:47:27 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16) c* i# Z0 m' q. k0 E
    我的版本是 3.9.7  , 遇到了问题 。请帮助

    * c. ~: L- p+ ~  j$ h你把在“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:477 l4 x8 R: Q) B4 O% `
    你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。

    & @5 D5 b8 `8 u7 j3 M0 ^$ a/ I4 L好的!!  麻烦了
    : V" S, C# E; J- W& \' b) J& G8 L! V# L& b
    1. import os
      9 I5 r( T0 g) G1 Y; q  f
    2. import glob- ^. \; x& k' X7 l4 \& `
    3. import re9 x: V7 A+ f! i, j% E/ w( c/ P
    4. import time
      - a% T1 C* V1 a3 i( T1 m6 V
    5. 8 N8 X9 g; a" r" m1 \
    6. #遍历所有子文件! Y1 Z# ~. R2 z1 ]2 I
    7. def getFileListAll(filePath):5 |) a5 H4 f! R" l6 p4 \
    8.     filelist=[]
      2 @0 r: F4 ^2 I: W
    9.     for root, dirnames, filenames in os.walk(filePath):
      ; W5 O# V. }7 F5 O- M" P$ |
    10.         for filename in filenames:
      # l. V8 N% v( T6 r1 R; k+ U
    11.             filelist.append(os.path.join(root,filename))
      1 X. L* u, X1 s  a$ D
    12.             #print(os.path.join(root,filename))# r' X3 b" m9 R# g3 u2 M, N
    13.     return filelist
      : Z/ m( f0 L3 B9 f; O* M8 Y2 ?; ?
    14. ) f7 P% e& H& n: G0 h, ~6 k. D
    15. #判断是否为txt文档6 w0 y# ]% \" J- B( U5 R/ q4 a
    16. def isTxts(nameList):8 v6 x0 ]  M: `! A( ~$ X
    17.     pattern=r"^[^~$].+\.(txt)$"   
      1 F3 j  N3 V& {9 I3 X3 M1 ?
    18.     patternObj=re.compile(pattern,re.I)" ?" }  \) S& A. e& P# }
    19.     notTxtList=[]# b2 \6 ]/ a. O( ^# V) d3 M
    20.     for fileName in nameList:
      , M* m( l- [6 t
    21.         if not patternObj.fullmatch(fileName):   #判断是否为txt文件   
      # G! N  [# j. g2 z& i
    22.             notTxtList.append(nameList): Q9 `$ h/ h; D/ N" |* [
    23.     if notTxtList:
      ! e0 v# E7 `+ b; O, E6 R( G/ U3 @
    24.         print("存在非txt文件:{0:},请处理后再运行程序!".format(notTxtList))8 j) N3 a( u+ d
    25.         return False% t" P2 j0 l  j+ ?, ]$ I9 o: B. L+ R
    26.     else:
      * s  ?" R; R, v1 P+ C
    27.         return True   
      & C5 T% c1 n+ g: l1 }0 F
    28. ) L; ^$ C: J5 o2 K5 t# a
    29. #在指定的txt文档中查找关键字6 |* y) v5 z3 A* N5 m
    30. def readTxt(fileName):#strkey:查找的关键字;fileName:文件路径, [( `' k$ ~: T( c  }" c
    31.     pattern=r"^[^~$].+\.(txt)$"   
      : }) _# a, X6 z; y# s# Z
    32.     patternObj=re.compile(pattern,re.I)
      0 X% E" \& E* r
    33.     if patternObj.fullmatch(fileName):   #判断是否为txt文件            
      / c& E! P: i. y, {# i
    34.         try:
      6 c; i: E6 ~  L* g8 r3 p
    35.             f=open(fileName,"r",encoding="utf-8")
      + Y- E7 }4 `# O/ s! Y) j* |
    36.             txt=f.read()9 q( e& m2 V4 `9 e
    37.             f.close()            
      $ L! A9 H* S8 [9 j0 P% D* }
    38.         except:+ y# y0 K0 f5 n6 n8 y  h* ?
    39.             print("读取文档失败:{0:}".format(fileName))1 c; P. @. I! s+ ~7 o
    40.             return ""              n7 |2 t: ]9 c/ l
    41.         else:   #无异常时,执行. w. B. o2 H4 Y7 |
    42.             return txt; B, L$ _9 u) ~) z3 u' v+ y
    43.         #finally:    #无论是否异常,都执行
      8 j1 o8 V2 N$ Y! M4 X. Q0 @* e/ z

    44. 9 m' q" B5 }* R$ [+ Y1 @9 T7 a
    45. def writeTxt(txt,outPath):; a% Y0 K& R. Z/ k
    46.     path="\".join(outPath.split("\")[0:-1])# ~: `& O1 m7 O/ n0 l+ u2 Z
    47.     if not os.path.exists(path):
      + B" ?% \6 y$ \, Q# i- \: }; t9 z0 g0 P
    48.         os.mkdir(path)   
        u+ }4 O3 y) g+ Y( o1 i9 G; c2 x. a0 F
    49.     try:% V! t# b( o9 ^: a
    50.         f=open(outPath,"a",encoding="utf-8")
      ( u' P8 n2 j# U; e/ k* T) T* s8 j
    51.         f.write(txt)" s, e- l( i8 I  C, i( I+ ~
    52.         f.close()
      " l) ~6 S( y# e5 m: d* J
    53.         return True            . c0 p3 E1 R7 t' a% u7 p
    54.     except:% E5 V- b# o- Z2 r% v" D
    55.         print("写入文档失败:{0:}".format(outPath))
      " Y. A* p- J1 i& X& x' h1 l
    56.         return False
      - R, W/ J: ^. G" F2 Y' t* k
    57.         #else:   #无异常时,执行
      * ]8 z4 \) q( e- Y' e# e: M
    58.         #    return txt1 Q3 R) A7 W; J. U, [0 S' n# E# L  ?
    59.     #finally:    #无论是否异常,都执行
      $ l! F$ F. P( Q. H9 t
    60. 6 A9 e) V$ f. Q6 H1 E% @
    61. def getfileName(fileList):
      , I7 B  c9 t+ k% h& [( a
    62.     '''
      2 R1 v7 X) r, Z3 m
    63.     :param fileList:文件路径列表
      ) F5 @  V; C  [7 G8 r3 c8 r1 f
    64.     :return nameList:文件名称列表有扩展名, f. \7 V5 p8 g/ n$ X7 z
    65.     '''2 H3 W, ~0 f8 ?/ ?% |* [8 X! k
    66.     nameList=[]5 W) u# R! R, I, h3 L1 ~; t
    67.     for fileName in fileList:$ [: R: x2 L: x; ]0 z% l
    68.         name=fileName.split("\")[-1]#提取文件名
      " U: m% ]& [) y9 A1 r9 h- E
    69.         nameList.append(name)
      ) q5 h! V- j* @) ^" l4 e- f0 c
    70.     return nameList9 g& v6 D6 h9 c4 h
    71. % j4 Y6 H% f+ y" P5 ~* t/ Q" W
    72. #显示重复的文件名,如果有重复文件显示重复的文件名称,并返回False,否则返回True+ {7 f' T$ e5 x5 k* ~
    73. def showDupFile(nameList):. m. e9 [* W- w
    74.     '''* P9 i7 x0 c* C( Q
    75.     判断是否有文件名相同的文件
      ) u/ A" t4 w7 ]+ }- Z( I2 I. W
    76.     :param fileList:文件名列表,包含绝对路径( j: C# l+ U2 |$ T
    77.     :return: 如果有重复文件显示重复的文件名称,并返回False,否则返回True: K) p2 k9 T; G+ g
    78.     '''
      ; a# ]5 U8 J- Q* a( K: c+ E
    79.     if nameList:    #如果文件名列表不为空
      7 a5 l# o# ?: `
    80.         nameSet=set(nameList): G1 R4 U1 B) j2 P  F0 I8 W
    81.         DupNameList=[]! z( Y  s. w, ?4 |
    82.         for item in nameSet:
      1 S% V# [" s9 C' L- f- O
    83.             if nameList.count(item)>1:3 |9 x' T* P4 R' o9 e9 W+ z1 ^- V- M
    84.                 DupNameList.append(item)
      1 O" }" N% c9 e7 j* |$ ]' S; J
    85.         if DupNameList:#保存重复文件名的列表* k8 ?' ]1 p; X* _
    86.             for L in DupNameList:
      % g% g( z. w- f! b
    87.                 print("{0:}为重复的文件,请处理!".format(L)) ; T! g7 Y. H1 G. @* s
    88.             return False
      3 \" A' i! X& s% S" ]
    89.         else:
      . ~7 d8 `8 A* M1 _& e- D2 h# n
    90.             print("没有发现文件名相同的文件,处理中...") 6 P2 \6 [' J+ v8 F+ N: v; c
    91.             return True
      & k. m5 j+ t6 s6 a2 ?" k& N  o
    92. 3 g( l' H8 I% z2 P* h$ |
    93. def nameListSort(nameList,rev=True):
      ! s& v9 f1 W; e7 @
    94.     '''+ m  s& v" o/ q( w
    95.     按照字符串长度排序
      + S* t6 d4 `" Q; o' v9 w5 r
    96.     :param fileList:文件名列表
      $ m; w2 w8 C$ x# H/ X) d
    97.     :param reverse:默认降序' m- }) d' T& w% ]$ e9 V  X
    98.     :return newNameList:返回排序后的文件名新列表
      ( c  m. R& H( e3 i7 D
    99.     ''': @3 [4 Y, k. K* H) H& B
    100.     newNameList = sorted(nameList,key = lambda i:len(i),reverse=rev) #按照字符串长度排序,降序
      8 j: b/ M4 h2 O# n
    101.     return newNameList    , y( k$ f) p. q; z( v

    102. 4 |4 I( E% F5 j& x' C2 j9 r; e
    103. #添加超链接
      ! N) e* O9 Y; J/ C- M; z8 O
    104. def formatTxtHref(nameList,txt):
      6 ~: L$ L  J. F* r0 e0 ^% v5 f
    105.     '''
      : H1 t/ m9 r) }! E' g+ O/ y+ z8 |
    106.     func:在文本中为特定字符串添加超链接" f9 E$ `2 N/ M& R( X
    107.     :param hrefStr:待添加超链接的字符串0 J$ ~" U+ N) W; [( J
    108.     :param txt:文本字符串; D, ~" r0 v* N- X$ c' N5 z
    109.     :return txt:格式化的文本字符串1 ]* i  A% M, `# e& Z8 _9 S
    110.     '''
      ' t- Q% c1 I! f+ T# L* R
    111.     print("\n开始循环添加超链接关键词辅助标记:")) e, z% d: V8 `: H  G
    112.     count=0! y, N. _: v, s  J$ ?! W/ T% P. M& Y
    113.     nameListDescend=nameListSort(nameList)
      ) z) h/ o8 J/ h& g+ K9 \* T
    114.     for nameD in nameListDescend:
      , r* h6 B9 C) O" B8 B/ U% X$ H
    115.         nameDSimple=nameD.replace(".txt","")" F+ D7 B6 L5 B& z; i$ u3 `
    116.         nameDSMarked="【@"+nameDSimple+"@】". B, h0 [" a$ n6 ?- ?( ?
    117.         txt=txt.replace(nameDSimple,nameDSMarked)* X/ p6 A5 p* V; H$ _
    118.         count=count+1' r" I5 U9 `2 e2 n! w
    119.         print("\r已完成第{0: ^6}个".format(count),end="")     1 ~% U$ I* D7 t7 J# X

    120. 6 }; z! x7 F, ^- r' V
    121.     print("\n开始循环清理嵌套的冗余的超链接关键词辅助标记:"); I0 n/ v  g: X
    122.     count=0- P  y: h" J7 {. m9 l
    123.     nameListAscend=nameListSort(nameList,rev=False)
      8 f  P, j$ g+ v+ ?# `0 C9 P
    124.     for nameA in nameListAscend:
      6 s+ |+ ~+ L( e  M( g
    125.         nameA=nameA.replace(".txt",""). B: m0 ]' ?/ Q
    126.         pattern=r"【@([^@】]*?)【@{0:}@】".format(nameA)        / P6 `# r/ N: d, \: }. j
    127.         patternObjTxt=re.compile(pattern)
      5 I# d- U( k% \* w2 S, m8 v
    128.         toHrefStr="【@"+"\\1"+"muyubug"+nameA9 Q$ |& |7 x2 N
    129.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串# B3 p% @% M9 C  P) a* J  l" T
    130.     . u. U& r" ?8 L
    131.         pattern=r"【@{0:}@】([^【@]*?)@】".format(nameA)        
      1 l! }$ z/ \9 S! s& c$ o2 j. B
    132.         patternObjTxt=re.compile(pattern)
      % T8 \3 i" B- l3 L
    133.         toHrefStr=nameA+"\\1"+"muyubug"+"@】"
      7 F; ]( f: A# f
    134.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      7 z* J' `  r# \: n/ }
    135.         txt=txt.replace("muyubug","")3 s: B: o: }$ ]1 Q5 f% Z
    136.         count=count+14 Z+ g& ~& V2 c3 V
    137.         print("\r已完成第{0: ^6}个".format(count),end="")4 s( Y9 O* d2 I$ p9 d
    138.     * |3 r3 L9 `: ~& U; B% j2 G
    139.     print("\n开始添加超链接,") " p; `! j, G% V* h/ {" ~
    140.     pattern=r"【@([^【@]+?)@】"' C" X0 D2 L4 Z# x9 Q; W  d
    141.     patternObjTxt=re.compile(pattern)& n  `! W" K- r
    142.     toHrefStr=r"<a href='entry://\1'>\1</a>"0 L1 w2 D9 Q2 P- ?4 X
    143.     txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串. ]  B4 G! D9 g' w! x# A) u4 N0 _
    144.         8 l; e9 {8 W5 }- ]
    145.     print("开始清理辅助标记,") - F; t" {  d1 e# E+ L
    146.     txt=txt.replace("<@>","")
      3 @0 L, @( n/ t, g
    147.     return txt
      7 e# y+ h0 G3 V  Q, c

    148. . q# I9 k4 S7 l3 n9 r
    149. def formatText(fileName):
      7 U: ]& [4 G0 N4 ^
    150.     '''
      9 M! h1 {1 C: v) F- g
    151.     func:清洗字符串,格式化
      5 |; G" n% H; [) |; E- Y) W
    152.     :param fileName:待处理文件* O& o5 N. a" B# y) Z& g8 X! w5 a$ [# \
    153.     return txt:处理后的字符串  |5 {* {: Q- C$ B# O. F
    154.     '''
      - L; Q6 l& U7 C5 u. y$ R
    155.     #提取文件名& W3 A* L' M% a  W* I1 L4 A+ I
    156.     name=fileName.split("\")[-1].replace(".txt","")
      ! R7 O: n7 w2 |! d7 Y, }4 w
    157.     #在文件名的每个字符键添加标记符
      8 n2 R8 g; H! X" D% h# Y" ^
    158.     pattern = re.compile('.{1,1}')
      ' L% T0 {8 p1 N! K4 O
    159.     matchCharList=pattern.findall(name), g3 |" G# t/ h
    160.     nameMaked="<@>".join(matchCharList)
      0 t* j; f. j7 s( b6 {( l
    161.     #生成标题部分
      - y  S4 y( h/ o! C. d
    162.     txtTitle=nameMaked+"\n"! c5 P8 V3 ]5 h  [
    163.     #读入文件4 y% E, g  D5 @
    164.     txtContent=readTxt(fileName)            + L8 l+ N! a' X4 L; s( _
    165.     #替换正文中的特殊字符, J. d* G1 C( h0 W
    166.     strList=["\n","<br>"]   
      & T1 a, n/ j8 H4 L: @" j7 w
    167.     for ch in strList:8 D7 m4 k3 c4 a4 ?/ y6 X
    168.         txtContent=txtContent.replace(ch,"<BR>")5 G* \# J  V  }8 g
    169.     #合成整个词条的内容
      , E) H2 D8 e$ x; y
    170.     txt=txtTitle+txtContent+"<BR>\n</>"/ w; T6 j) n- k/ d& |$ w
    171.     return txt
      . i0 c& g4 C: u  G

    172. 4 A7 U6 W8 r# l. M6 [$ z4 j
    173. def mdxFormat(path,outputPath):
      5 ?9 u+ Y  p8 d% I
    174.     '''
      - A6 g, J: h% S% o5 j
    175.     func:格式化文本
      : {6 ^3 d" A9 z5 l; S' `4 U( j
    176.     :param path:待格式化文本的路径' b+ H; ~% G' U6 n# [% i4 o4 h
    177.     :param outputPath:输出的路径和文件名
      4 w8 h) y- J* ?% O
    178.     '''5 w3 i$ K: a2 |* D1 @+ h/ f4 I
    179.     fileList=getFileListAll(path)#获取指定目录下的全部文件,包括子目录中的文件6 L" |1 |. A" F/ N6 m: w
    180.     nameList=getfileName(fileList)
      & C9 A( |, {- n$ i6 x8 l& Q# u
    181.     if isTxts(nameList):) o1 Q* ], p3 v( B: Z
    182.         if showDupFile(nameList):#如果没有重复文件
      " }& e( U0 a) N* _4 i, F- q
    183.             print("找到了{0:}个txt文档,".format(len(nameList)))
      : g( y/ M* m9 i& i# o

    184. + g, a" q: g% Q# H8 ^9 K
    185.             print("开始格式化、合并文档:") 3 Z2 U+ D/ \- c  _5 A
    186.             count=0#txt文档数量统计! b* B% v  j5 B& P8 ]  s3 `
    187.             txtList=[]#存储文件内容
      ' j+ c3 t1 s& E5 ~' s0 b; S
    188.             for fileName in fileList:                9 f+ M/ D$ m5 U$ g! j% f
    189.                 txt=formatText(fileName) #转换换行和<br>为<BR>                   / |: J6 d5 n0 X$ v# u3 P& \
    190.                 txtList.append(txt)
      " s4 w2 ^, r. i: Q9 k1 H1 s, u" _
    191.                 count+=13 @+ W3 M0 n8 K  u3 y; X4 C' b
    192.                 print("\r已完成第{0: ^6}个".format(count),end="")                  
      0 f9 F) z* A6 w" p
    193.             txt="\n".join(txtList)
      $ |8 @9 b: l! M6 J9 i7 X6 d
    194.             : I: ^8 p! N) l
    195.             #添加超链接3 X% t# \5 l- V3 R7 ^/ v5 d
    196.             txt=formatTxtHref(nameList,txt)
      : m, L) c" a& a: w( X
    197.             print("开始写入文本,")
      ; i  G+ A0 r5 A% G1 t, s* s. _! d- t( i
    198.             if writeTxt(txt,outputPath):+ h0 i# g- |4 B& O+ ]. d1 D- y
    199.                 print("文件合并输出成功!")
      6 C5 w+ L6 u, Y
    200.             else:! K7 ^% D+ a  [9 @) D( z
    201.                 print("Error:Merge!")+ s7 }# N. B0 U/ t1 H; i
    202.                 return  3 g$ K8 L6 Y" ~( A6 q
    203.                 ' w) j  [* m* e" Q. v% z1 ^3 T
    204. def main():3 A5 k& ^' f& Q6 f# q2 L9 A8 D
    205.     timeStart = time.time()
      8 R2 j5 u5 m5 ^5 I( ^: S
    206. 3 ^  T6 ]3 ?, D3 B. o; A

    207. ! q; }! d- X; |

    208. 1 I& ~" W  _9 S: L) [
    209.     path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
      1 e8 N7 H% ]( g. J: E; z5 T1 a% U7 s
    210.     " w) u" t& J8 I7 S' V( y9 L
    211.     outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"8 N# c" ~7 O3 e( C: l. P& @
    212.    
      8 x: j* c. J" W# n3 F& U1 S% ?) W
    213.     mdxFormat(path,outputPath)
      7 b. Y& I  P' k1 N
    214. 0 ~' m, B/ D6 R! E4 a. V  r% Q$ e
    215.     timeEnd = time.time()
      1 D& u; j2 @/ _
    216.     print("程序运行了%d秒"%(timeEnd-timeStart))4 c& i: b9 X3 R# j: S( {$ L- K
    217. % d. U& i6 V& `! o7 x2 l8 B1 r
    218. if __name__ == '__main__':
      ) L- R0 m8 u( l' T
    219.     main()
      , |% R" }& y" t! w: ]0 s- J7 }
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-7 19:54:52 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59: g. w! a- p2 \* y
    好的!!  麻烦了
    1 a3 E8 p: r9 V. S* \5 Y( ?8 d
    你修改了哪条?

    该用户从未签到

     楼主| 发表于 2021-10-7 21:48:13 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    ( l# d' n6 M: [7 z: L- U好的!!  麻烦了

    9 p5 Q8 e1 V# I5 Q; n) zpath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
    8 T) s6 V9 ~0 e/ Y( A7 joutputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
    " l2 k4 \. M" X; U; ]5 ^7 K4 t6 t这两条有问题吧,应该是下面这个格式8 m! }4 V$ ^% W! n0 f4 `3 G! g8 [
    r"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
    2 L, s/ k9 S! c7 J( t* ypath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test", Q  w/ p) h% x
    outputPath=r"/Users/vivian/Downloads/md ...
    % d, ]% J6 @$ H0 t
    我用的是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+ i' B/ a* j; a
    弄个windows操作界面该多好
    , k$ x& }9 o* b% Y+ v. [% q% O
    sorry!算法还不完善,需要的人也不多,空闲时间比较少....暂时没有写GUI的打算
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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