掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1083|回复: 16

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

[复制链接]

该用户从未签到

发表于 2021-7-25 10:47:05 | 显示全部楼层 |阅读模式
本工具适用python3.9.5编写。可以把指定路径(包含子目录)下的txt文档格式化为mdxbuilder使用的格式(每个词条三行:key,value,</>)。1 N, g; b- }  t& h. p
特点:
7 B+ X4 |3 T* G; j1.支持不同编码格式的txt文档,默认输入输出均为“gbk”编码。
( F# b  }/ o0 P) L8 N4 X2.我写这个工具是为了整理个人的常用资料,为关键词添加超链接,实现跳转。# j2 _- H" d# a0 K6 T
ps:我以前一直使用其他人写好的程序格式化txt文档,但是如果关键字之间存在嵌套,超链接格式化有问题,所以我自己编写了这个程序,但还有一点不完美之处,就是不能很好的解决自身跳转的超链接。望大神指点!) r8 u" G7 Z. k

7 B5 c: @/ J  K" T

本帖子中包含更多资源

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

x

评分

1

查看全部评分

该用户从未签到

 楼主| 发表于 2021-7-26 12:34:25 | 显示全部楼层
n0thing 发表于 2021-7-26 02:18
$ J  q; u8 \4 z' l+ R+ T能不能發一個 .txt 的範例?

8 k) M" x! l+ B" b4 F+ {3 ?7 Xtxt文档的文件名为关键字、文件内容就是词典内容。  v9 f2 `! U# t9 O
6 G3 H4 V2 @% Y$ M
我主要为了实现资料间的超链接跳转。

本帖子中包含更多资源

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

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 编辑 ' g6 }4 C$ q- m' v
    kyletruman 发表于 2021-7-25 11:58
    0 Z$ p6 S  T$ C( T. ^* j: h能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊
    0 ]1 v/ R6 g) m8 U

      S  O7 Q5 @$ d9 K我制作的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 编辑
    & N; ^' H9 m6 \* [) `5 l2 {# Y# o$ u+ r* b  o* _: L  M- |
    输出默认是gbk
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-6 20:16:02 | 显示全部楼层
    我的版本是 3.9.7  , 遇到了问题 。请帮助
    7 Z; a  O+ B, N( x7 a0 Q* b
    ( ^; o6 A0 W6 s- i3 W4 ]: I
    1. ❯ python mdxFormat_upload_V3.5.py
      ) r. o7 _$ \* _* G3 y" \( L
    2. 没有发现文件名相同的文件,处理中...
      0 L" J, O0 c0 Q1 h2 ]6 P/ {
    3. 找到了4个txt文档,2 I5 {( Z$ G. u' w- G  H5 T
    4. 开始格式化、合并文档:) O, O" P( _# X
    5. 读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/药品检查管理办法.txt
      2 n! Y% `  c+ z; l. K4 h  d
    6. 已完成第  1   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/我的广告法管理条例.txt
      0 a5 ~- j% S2 K" t- b* h6 H
    7. 已完成第  2   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/北京市反食品浪费规定.txt" Y  I+ x6 T0 g9 N) M, X3 G
    8. 已完成第  3   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/中国共产党组织工作条例.txt, G" e: N" m. j
    9. 已完成第  4   个% C7 I1 i! \% L4 |; n
    10. 开始循环添加超链接关键词辅助标记:5 M) @* Y6 r3 A5 v, \! I
    11. 已完成第  4   个) Q  X! f! q: B* _; U
    12. 开始循环清理嵌套的冗余的超链接关键词辅助标记:
      7 _' `3 Q. i1 t/ c9 f
    13. 已完成第  4   个
      - e" U# V7 w- y2 X2 h8 O* b
    14. 开始添加超链接,8 l8 i: }) z5 _  j, O5 X# V: E
    15. 开始清理辅助标记,& L9 a0 x, _8 L3 S7 s
    16. 开始写入文本,
      4 N. W+ k$ z+ f9 D/ J
    17. Traceback (most recent call last):; e# O4 Y$ O% \) k
    18.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 219, in <module>
      * g) s% L! s' S& t: |
    19.     main()2 i  {) Q2 G( M$ w$ J& h! T
    20.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 213, in main
      # r5 l+ o* \1 C) P1 z
    21.     mdxFormat(path,outputPath)
      ( I: |- g. L' o+ ]+ w- T
    22.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 198, in mdxFormat
        A( f8 N& x5 S1 m- R
    23.     if writeTxt(txt,outputPath):
      ; o# L# z: v/ R+ H
    24.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 48, in writeTxt4 i9 O/ k" t" Q! A6 t6 U; y1 R) \
    25.     os.mkdir(path)5 }3 u; l% D4 _/ B2 J+ Q5 X8 p  _( U
    26. FileNotFoundError: [Errno 2] No such file or directory: ''
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-6 22:34:08 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16
    , K$ q' U& j6 M: P% s8 b我的版本是 3.9.7  , 遇到了问题 。请帮助
    3 A! R, H5 m8 w8 S* i. a) W8 ?
    mdxFormat读取文件的路径是绝对路径。你得在mdxFormat_upload_V3.5.py-中设置下文本文件的路径。有个变量“path”

    该用户从未签到

     楼主| 发表于 2021-10-6 22:47:27 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16
    * b# k/ I8 V5 X% `* K我的版本是 3.9.7  , 遇到了问题 。请帮助

    $ v  C! r& W- y" j3 T你把在“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:47- ]! w/ Z5 d! r; L. W( v
    你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。
    - C& y" e/ q3 z& A4 Y, \% q
    好的!!  麻烦了1 ~3 r2 N( U. m& j" O

    - h5 s* E! {+ k* @* |
    1. import os  i* H  ^# L( x+ C8 u
    2. import glob. D% h2 g: O8 G( W
    3. import re
      , d# i* e/ \8 t$ Q; l5 z9 n
    4. import time
      $ n' r% O6 C5 q' V- a7 H
    5. # @( I+ u! W( J" {; Y1 k
    6. #遍历所有子文件
      0 n* `& |# t8 E
    7. def getFileListAll(filePath):
      3 _) Y2 b  O, k3 [3 [0 p
    8.     filelist=[]0 T" Q$ K  y( G) H
    9.     for root, dirnames, filenames in os.walk(filePath):% \: \. e: m9 v) ~
    10.         for filename in filenames:5 a1 y4 n# Q2 b7 d' T7 R
    11.             filelist.append(os.path.join(root,filename))
      0 Y, [7 }6 I7 ^- j) {; X6 |
    12.             #print(os.path.join(root,filename)); b% A, ]4 ~3 ~7 H8 x  z
    13.     return filelist( w9 ^: L# G* _

    14. - [& ^. I; ]/ J; v
    15. #判断是否为txt文档$ h2 T6 s/ t3 Y, F
    16. def isTxts(nameList):- h, F% k+ e4 p- z$ U
    17.     pattern=r"^[^~$].+\.(txt)$"   
      . P0 C5 d5 D7 Z7 A) e
    18.     patternObj=re.compile(pattern,re.I)  \  f  }6 I0 H( p) T
    19.     notTxtList=[]( o( U  \( P( j: X
    20.     for fileName in nameList:
      " I: c+ E0 F0 a- g+ d  b: {
    21.         if not patternObj.fullmatch(fileName):   #判断是否为txt文件    8 S! ]8 I5 u8 w+ B2 A& Z6 x
    22.             notTxtList.append(nameList). P  F9 C/ m' ]2 e% P1 x$ x) C
    23.     if notTxtList:0 S9 d0 ?% I  j& o8 c
    24.         print("存在非txt文件:{0:},请处理后再运行程序!".format(notTxtList))+ X! C* i4 G. q' E# d/ @3 X
    25.         return False
      , _! s' x& A# g. x( N* X' t6 F- |
    26.     else:% A/ n' W4 \  _/ Y" Q& v/ [+ f
    27.         return True    ' w8 @; G- @: D/ }/ J1 a

    28. 7 a2 z6 y" _$ m& w
    29. #在指定的txt文档中查找关键字
      / Y8 P8 v% q  e9 I9 v
    30. def readTxt(fileName):#strkey:查找的关键字;fileName:文件路径
      # R: v  g7 I4 ?
    31.     pattern=r"^[^~$].+\.(txt)$"   
      $ x* \3 o; o9 k% o
    32.     patternObj=re.compile(pattern,re.I)  x% @, w4 \$ }7 h: W5 c) y7 T
    33.     if patternObj.fullmatch(fileName):   #判断是否为txt文件            
      ' ^- j7 ?5 {7 L. C' n% q) o
    34.         try:
      ( |/ G/ Q% C! y, J& u8 M
    35.             f=open(fileName,"r",encoding="utf-8")1 V# K6 ?6 l. K2 P
    36.             txt=f.read()
      - z; W# Q" o" Q2 q+ t
    37.             f.close()            1 j8 X0 N) Z2 G% n6 m8 I
    38.         except:: D( [& A0 u$ n* p. d0 |
    39.             print("读取文档失败:{0:}".format(fileName))9 a8 v" |& c! u: f
    40.             return ""            3 j' L5 F. P0 y" O8 M
    41.         else:   #无异常时,执行( W7 e* R/ I& S
    42.             return txt
      ) e5 _9 S/ U+ Z
    43.         #finally:    #无论是否异常,都执行8 p  g3 e$ f5 D$ S

    44. * H2 Q3 R# g- \5 n! G
    45. def writeTxt(txt,outPath):' Y0 I  ^* @6 o2 x7 m7 c* u
    46.     path="\".join(outPath.split("\")[0:-1])* V! v) G  I* {' c. e6 o6 d& e
    47.     if not os.path.exists(path):4 N: r& f7 k" |9 k
    48.         os.mkdir(path)   
      4 u7 N# _! ?- ~" O9 O
    49.     try:
      * @$ @. n) b8 E" M( q' t
    50.         f=open(outPath,"a",encoding="utf-8")
      ' A- \+ j% b) k9 X1 s0 a6 Y' A& X
    51.         f.write(txt)" x4 v4 v; C5 O0 ^6 C
    52.         f.close()+ |9 u9 b# [7 B1 D' l/ W5 g& B
    53.         return True            
      5 j2 [& b: s8 G5 V
    54.     except:* w/ e5 w0 R; I6 [0 M8 P9 x2 y
    55.         print("写入文档失败:{0:}".format(outPath)); }, i6 g" g: A- |" U
    56.         return False& U0 F0 b! Q* T  y
    57.         #else:   #无异常时,执行
      8 B) o( S; Y3 C7 f& M3 s3 J6 E
    58.         #    return txt
      + B4 V5 L: G& H) E; p7 I' _
    59.     #finally:    #无论是否异常,都执行
      9 O+ H) t+ B4 {% P4 x

    60. ! x9 z! R+ }8 j% ]! c1 A& i2 p+ g
    61. def getfileName(fileList):
      , ^  }4 d, U- ^5 a
    62.     '''  u& ^$ G, J: C- y
    63.     :param fileList:文件路径列表
      / e8 v1 ~2 ]) r4 l8 d6 Y# t; s
    64.     :return nameList:文件名称列表有扩展名
      2 g0 D9 J5 s0 L' y9 K' |
    65.     '''
      ; D1 q9 \: H+ m! b* z
    66.     nameList=[]' @; c9 O; f" @0 T$ |- {3 y; H
    67.     for fileName in fileList:
      ) p' @3 l% V6 M+ [: w& N
    68.         name=fileName.split("\")[-1]#提取文件名
        |. ]/ b1 {- @. a  y$ Z; G. M$ a
    69.         nameList.append(name)
      ( T! D" K) q9 E+ V: G  U, \
    70.     return nameList; ]0 B: t3 w& L

    71. 2 W- D' i: S6 L" c0 m
    72. #显示重复的文件名,如果有重复文件显示重复的文件名称,并返回False,否则返回True
      , }6 N! X9 Q" B; v: d/ c6 U" z
    73. def showDupFile(nameList):
      8 z& r: T5 @/ @+ D  x
    74.     '''" [& H1 p5 i0 N9 |! J' B* S
    75.     判断是否有文件名相同的文件
      ! E% J: }* o0 c# r0 k0 q8 _3 g
    76.     :param fileList:文件名列表,包含绝对路径
      - X/ U/ D  y4 j# h& ?/ a! O0 U
    77.     :return: 如果有重复文件显示重复的文件名称,并返回False,否则返回True
      3 u! K8 ~1 A, y  e! Y: c# X0 x- K9 [
    78.     '''
      9 f7 }5 T+ M* a/ \8 U
    79.     if nameList:    #如果文件名列表不为空( D3 n; s+ W$ F  I8 L! c
    80.         nameSet=set(nameList)+ {1 B- f+ I, \0 G5 ~
    81.         DupNameList=[]) o; |9 [( _6 B+ Y
    82.         for item in nameSet:) T2 r+ s% _7 A$ q# u
    83.             if nameList.count(item)>1:
      1 E+ u6 J: |  _" m" i% `) m
    84.                 DupNameList.append(item)  u+ Y- E, W' B4 T! w9 H
    85.         if DupNameList:#保存重复文件名的列表
      8 V2 r8 R9 V9 H, I( T" c
    86.             for L in DupNameList:
      ) r7 l0 I: r4 x' A! x
    87.                 print("{0:}为重复的文件,请处理!".format(L))
      # _5 U2 D+ f5 h3 ^, L
    88.             return False; U8 x3 G2 [2 ^, N$ L/ t9 f1 Q$ m: y
    89.         else:
      , G, K3 c: D( L9 s5 V
    90.             print("没有发现文件名相同的文件,处理中...")
      $ u3 I# V& u' R: l$ {
    91.             return True
      3 o) y) \! |" f$ r

    92. & C  C  {1 i; b  M$ n! [+ d
    93. def nameListSort(nameList,rev=True):, V5 i2 u* W; ?7 t% E/ Z2 A
    94.     '''
      1 ~& D4 M! y& ^2 G5 O0 p8 h, G( s  t
    95.     按照字符串长度排序
      9 c+ ~  ^$ x0 W+ o+ Z, X' j
    96.     :param fileList:文件名列表" n0 R+ G" S: \" p
    97.     :param reverse:默认降序5 L1 B- W, }1 X! e* K0 w
    98.     :return newNameList:返回排序后的文件名新列表
      2 G8 I2 T3 [8 W
    99.     '''' z- S) l  `4 Y4 C  J) J; I3 W
    100.     newNameList = sorted(nameList,key = lambda i:len(i),reverse=rev) #按照字符串长度排序,降序
      + w1 T% m/ b" S: u6 ~) _
    101.     return newNameList    6 Y; y' B: R6 O. H; N& o
    102. : B+ O# t3 V: H/ z; e6 k
    103. #添加超链接
      " S0 d: g5 p: P
    104. def formatTxtHref(nameList,txt):
        k0 ^! K1 L* m% }; ^
    105.     '''
      % c  }1 _' h: |' D! C
    106.     func:在文本中为特定字符串添加超链接
      . [; E) i0 @6 p+ x7 P
    107.     :param hrefStr:待添加超链接的字符串
      & a" S# Y, t$ \% J
    108.     :param txt:文本字符串
      : X$ i5 L7 Z+ J; m2 m" E' i, o2 [- V
    109.     :return txt:格式化的文本字符串0 X; Y3 q4 Q$ M8 }+ A
    110.     ''') {5 P3 n( }* @" o9 [
    111.     print("\n开始循环添加超链接关键词辅助标记:")
      : Q& Z+ b5 G) l* P( l* O. u
    112.     count=0/ \4 u. n6 L, b% w
    113.     nameListDescend=nameListSort(nameList)
      4 j2 T+ O* j4 S- |1 X$ ]/ r" S
    114.     for nameD in nameListDescend:3 v8 s# T8 `/ k1 o7 ]( y% I  E
    115.         nameDSimple=nameD.replace(".txt","")8 ?5 l/ K) u# c6 F8 r
    116.         nameDSMarked="【@"+nameDSimple+"@】"5 {' {' d: L/ W2 F
    117.         txt=txt.replace(nameDSimple,nameDSMarked)4 F, o. E1 o2 a  v& k
    118.         count=count+1/ c, j1 h$ W( u& T
    119.         print("\r已完成第{0: ^6}个".format(count),end="")     $ F5 o& ]4 Z' b; H, H- M

    120.   p* E1 m. [: q4 N
    121.     print("\n开始循环清理嵌套的冗余的超链接关键词辅助标记:")# j) T  X& _4 T1 N, A( \
    122.     count=0
      0 N2 G1 A+ k6 E/ {5 V# W* x* ^
    123.     nameListAscend=nameListSort(nameList,rev=False)
      $ \- _7 |- t8 \: l, {( K
    124.     for nameA in nameListAscend:
      ' Q. l) h/ D8 S" i- [9 M% S
    125.         nameA=nameA.replace(".txt",""), H9 V+ B  A4 ]. x* S2 Y
    126.         pattern=r"【@([^@】]*?)【@{0:}@】".format(nameA)        : ~' G3 s5 T+ r
    127.         patternObjTxt=re.compile(pattern)
      * S6 A5 P: d# A3 k$ k
    128.         toHrefStr="【@"+"\\1"+"muyubug"+nameA
      ! _$ W, t! t) ]( y' X8 U4 t* O0 M
    129.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      ! T0 f. x2 l5 i
    130.     - S# s; Y4 u) B
    131.         pattern=r"【@{0:}@】([^【@]*?)@】".format(nameA)        6 o- w! f# }* Q- c* t  V4 w: t! [) r; q
    132.         patternObjTxt=re.compile(pattern)6 r, L2 T- X( q0 l, e5 H+ B! s
    133.         toHrefStr=nameA+"\\1"+"muyubug"+"@】"' z$ Y( A2 a% M" o- k" O1 n
    134.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      4 D; ^4 s5 ?5 ^) o+ {1 D
    135.         txt=txt.replace("muyubug","")
      : E1 A* F- M# L
    136.         count=count+1- I  b: O. ]2 ]
    137.         print("\r已完成第{0: ^6}个".format(count),end="")
      1 `/ t4 a% R" h. v0 ]
    138.     " M8 x+ \2 r/ m0 n  g; m& J, i7 I
    139.     print("\n开始添加超链接,") - Y! ?. l: V1 p# Z
    140.     pattern=r"【@([^【@]+?)@】"$ ]/ B% F8 F9 D! v8 V
    141.     patternObjTxt=re.compile(pattern)
      ) ^* o; T, G6 X# b% C$ O1 X0 L
    142.     toHrefStr=r"<a href='entry://\1'>\1</a>"
      $ O7 |' M% Z& q% s3 E0 _
    143.     txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      , B* E& V% u9 ~0 ^
    144.         
      2 Y) x1 c+ ~& i8 S
    145.     print("开始清理辅助标记,")
      4 h$ z- J" m: `. D, _, S
    146.     txt=txt.replace("<@>","")
      9 Y9 |5 v% m: F+ W# f
    147.     return txt: U0 R4 G4 e: ~) o! z' ]+ B8 q# Y
    148. $ X& }: X" H% y" t( O: {
    149. def formatText(fileName):
      0 Y/ u% W( b' R: W" U- e
    150.     '''& P8 P4 @0 _5 k, _
    151.     func:清洗字符串,格式化
      4 r2 X% U/ Y/ L1 \) E* T) N
    152.     :param fileName:待处理文件
      2 w( b! v) `! A6 v( |: s" H
    153.     return txt:处理后的字符串1 }/ B* o" w2 ~: ]& v& J) J0 n
    154.     '''9 p( ?: [2 N# ?& q7 u7 }
    155.     #提取文件名
      . F% `6 t9 t0 s. W
    156.     name=fileName.split("\")[-1].replace(".txt","")5 U& ?' R3 z& [; @& }
    157.     #在文件名的每个字符键添加标记符" |+ |( ^& u- Z3 H( k/ Z
    158.     pattern = re.compile('.{1,1}')
      0 M+ I9 z( j2 b& D1 h- M+ l
    159.     matchCharList=pattern.findall(name)) k7 C7 _1 S* a0 d
    160.     nameMaked="<@>".join(matchCharList)
      7 S  N9 ^5 I1 x
    161.     #生成标题部分- G; S8 E; l+ r% z/ b2 e! ~* c5 q
    162.     txtTitle=nameMaked+"\n"
      " D' f4 H4 Y( p& ^# v# q4 C
    163.     #读入文件
      6 S$ N) P0 x% n& ^# E: A0 {
    164.     txtContent=readTxt(fileName)            & ^; Y: _- F1 a) |, X$ P
    165.     #替换正文中的特殊字符
      8 m  Y# }2 H4 ]  C
    166.     strList=["\n","<br>"]      q6 b, z$ J5 W7 }9 L! w3 @# i6 l% H
    167.     for ch in strList:) @3 r- x8 o7 w9 ~6 w' ^' B3 ~5 s2 N
    168.         txtContent=txtContent.replace(ch,"<BR>")
      ) Y7 m! U9 A7 U8 X  V: ~& E! S4 p
    169.     #合成整个词条的内容
      ) Q0 _( H) ^" ?7 F8 H: G$ x
    170.     txt=txtTitle+txtContent+"<BR>\n</>"/ ?% k9 B4 I$ ?5 i( ~
    171.     return txt  i' l' N( q  S# c

    172. 5 R$ d" n/ D; ]: H
    173. def mdxFormat(path,outputPath):
      . s2 e) @& X, r+ M. h
    174.     '''9 y% f# r+ @1 P
    175.     func:格式化文本# n  v! M! F! L* b9 e, l# x4 f7 G
    176.     :param path:待格式化文本的路径4 j/ A" {, E+ x; x4 l
    177.     :param outputPath:输出的路径和文件名4 X  p8 I( u' |% g3 A3 }9 _" }4 X
    178.     '''& u4 A8 k, B/ }! R" q# _  q% k5 J; ^
    179.     fileList=getFileListAll(path)#获取指定目录下的全部文件,包括子目录中的文件8 J7 V" ]! M4 ^( a! G
    180.     nameList=getfileName(fileList)
      2 Y4 W2 b) F: u  s+ W' @
    181.     if isTxts(nameList):+ k6 \. o, B: J2 N! R$ Z2 T" _+ }
    182.         if showDupFile(nameList):#如果没有重复文件+ r2 i9 F9 N. C5 D4 D
    183.             print("找到了{0:}个txt文档,".format(len(nameList)))3 q, `) P/ u2 l0 L

    184. ' v9 X0 t6 J+ F, ^' }
    185.             print("开始格式化、合并文档:") . K& W7 U& U0 o
    186.             count=0#txt文档数量统计
      ) U! z& I0 n3 S
    187.             txtList=[]#存储文件内容+ [0 i/ @( X+ A' S
    188.             for fileName in fileList:               
      ( H* k" @! U8 R& K
    189.                 txt=formatText(fileName) #转换换行和<br>为<BR>                   ! f! t! r" c  J2 ^
    190.                 txtList.append(txt)
      2 T, `. ], _+ f$ \# g8 ?7 `$ d
    191.                 count+=1
      0 x8 N5 t) Q5 [3 |, P0 j& f
    192.                 print("\r已完成第{0: ^6}个".format(count),end="")                   4 V, ]) H) n; j6 j5 d0 C/ `8 d
    193.             txt="\n".join(txtList)
      $ k. A- d7 e2 O8 [. r
    194.               R0 h" ^7 Z( Z* @& Z. N& n3 A, b9 N9 Z
    195.             #添加超链接) K# D4 D% \* P8 g! w- L* y
    196.             txt=formatTxtHref(nameList,txt)- {( z6 x- ^8 b- V6 W9 ?( d
    197.             print("开始写入文本,")
      . G5 \. B& ^4 M! L
    198.             if writeTxt(txt,outputPath):/ G' f2 f2 U( T( t4 M# ?
    199.                 print("文件合并输出成功!")
      + x4 h& e8 l4 C! Y' Z& r' D
    200.             else:
      5 v5 C+ j9 D; K4 B
    201.                 print("Error:Merge!")( O- m8 A" U  f) R: _" I
    202.                 return  1 {5 n) N1 o" I$ ~2 ^) O
    203.                 2 M7 d. P' o: P+ p- o: }
    204. def main():0 K7 O; i( h5 \6 b7 k& j
    205.     timeStart = time.time()
      5 e4 U, F$ D6 ^- t
    206. & z0 S# X% T7 d1 y  ?) i9 u

    207. * X4 `5 ^- L$ [; X1 s
    208.   E6 R' P' E" A' T, O
    209.     path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
      : x. }1 b( h$ N- L% m5 M
    210.    
      . L; ^, z+ ^! G7 R
    211.     outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
      : ^2 k/ w8 t3 W" [5 l/ V0 E2 K
    212.     . q1 u5 ~8 s7 f: u2 j# F0 [
    213.     mdxFormat(path,outputPath)% I% v0 @* `8 `5 }3 m9 `
    214. 3 T$ l6 }1 l8 L8 o) {2 d, G& _/ A
    215.     timeEnd = time.time()& v# F; X2 I( N' P
    216.     print("程序运行了%d秒"%(timeEnd-timeStart))( Z' _8 Z# R# h

    217. " u: g& V1 ~# J! K5 O/ B
    218. if __name__ == '__main__':- x( h* v7 ?# F- {
    219.     main()- }3 u/ }/ f1 N. z; i1 _
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-7 19:54:52 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    9 J& b' A+ A) n! t: h9 b" [% l好的!!  麻烦了

    % v$ @+ n) P" t你修改了哪条?

    该用户从未签到

     楼主| 发表于 2021-10-7 21:48:13 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59
    0 T. j" v: {, @$ V好的!!  麻烦了

    3 V8 c4 m- S. c3 |path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"- }1 M" M  c8 o  r0 q- S' m2 k
    outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"! M9 y5 F! M8 N6 v' [' ]8 t& B
    这两条有问题吧,应该是下面这个格式
    ! y. H6 b0 R5 |6 Z* J5 x9 l8 \9 @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( w" c& q) r$ g1 p' N0 M' T: v
    path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
    9 e+ ?) Y4 x! p: P: \' i6 A1 u3 HoutputPath=r"/Users/vivian/Downloads/md ...

    $ i: N) @$ y! O! m6 w, K$ `6 Z5 C我用的是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
    2 r5 |! x! N' p8 e0 _1 S" |弄个windows操作界面该多好

    6 C! P$ Q3 z# E" v7 R1 Ssorry!算法还不完善,需要的人也不多,空闲时间比较少....暂时没有写GUI的打算
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-5-11 07:32 , Processed in 0.025075 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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