掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 879|回复: 16

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

[复制链接]

该用户从未签到

发表于 2021-7-25 10:47:05 | 显示全部楼层 |阅读模式
本工具适用python3.9.5编写。可以把指定路径(包含子目录)下的txt文档格式化为mdxbuilder使用的格式(每个词条三行:key,value,</>)。" d5 ^" w7 u" X+ }
特点:
  l$ c- `$ A, F$ q1.支持不同编码格式的txt文档,默认输入输出均为“gbk”编码。
, L+ E! r( b6 U% _( Z9 g1 k2.我写这个工具是为了整理个人的常用资料,为关键词添加超链接,实现跳转。
& q/ `$ E  R8 N  }2 Ups:我以前一直使用其他人写好的程序格式化txt文档,但是如果关键字之间存在嵌套,超链接格式化有问题,所以我自己编写了这个程序,但还有一点不完美之处,就是不能很好的解决自身跳转的超链接。望大神指点!
+ y' d2 a  v, l" Q( e3 b5 {- O# S4 I+ t6 s% m

本帖子中包含更多资源

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

x

评分

1

查看全部评分

该用户从未签到

 楼主| 发表于 2021-7-26 12:34:25 | 显示全部楼层
n0thing 发表于 2021-7-26 02:18, C. V' s! y. d; T( m+ F
能不能發一個 .txt 的範例?

9 h3 f1 |' ]: J8 z1 @/ D2 G) |txt文档的文件名为关键字、文件内容就是词典内容。' @% w" i- [3 z8 Z" |$ T5 {3 W/ b

; |$ g- S- C, k- o" [) A我主要为了实现资料间的超链接跳转。

本帖子中包含更多资源

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

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 编辑
    + d0 S$ T4 C+ }; |
    kyletruman 发表于 2021-7-25 11:58
    , _, r3 ~" r* a0 W能不能默认输出UTF-8编码呢?“gbk”编码不方便文本编辑啊

    . w9 k' Q( b( X2 P
    ) l* A. Q- k6 ~( R我制作的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 编辑 ( }% a0 Y7 h; g8 w
    7 G; D( X. P1 C% Q) P8 U, R
    输出默认是gbk
  • TA的每日心情
    擦汗
    2021-11-17 09:18
  • 签到天数: 79 天

    [LV.6]常住居民II

    发表于 2021-10-6 20:16:02 | 显示全部楼层
    我的版本是 3.9.7  , 遇到了问题 。请帮助 7 K  _) z) \; B" W5 n0 M" F8 x

    / e; F& Q% \: F4 j4 D
    1. ❯ python mdxFormat_upload_V3.5.py' R  S: E% F/ d5 W
    2. 没有发现文件名相同的文件,处理中...+ b. ~( b1 S  i1 P) e, p
    3. 找到了4个txt文档,8 q! q" A$ m1 t9 I% z. E
    4. 开始格式化、合并文档:
      # o# l3 K) n( \
    5. 读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/药品检查管理办法.txt0 v$ s4 g5 }0 G  l  C0 V
    6. 已完成第  1   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/我的广告法管理条例.txt1 S, T) H* ^7 r" t# i5 q  @+ j. D
    7. 已完成第  2   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/北京市反食品浪费规定.txt
      9 n7 B5 i& ~1 E* o& h# C7 c- i+ J
    8. 已完成第  3   个读取文档失败:/Users/vivian/Downloads/mdxFormat_upload_V3.5/test/中国共产党组织工作条例.txt
      - s8 ?; Y: h3 ]( A: K. L
    9. 已完成第  4   个& O$ l: s6 I! C6 c1 `5 ~
    10. 开始循环添加超链接关键词辅助标记:& {  D# W" B# K" c7 n
    11. 已完成第  4   个
      , ~, v+ F! }/ i( `
    12. 开始循环清理嵌套的冗余的超链接关键词辅助标记:
      * a9 Z- Z) r# U
    13. 已完成第  4   个
      , [7 ~- g9 T* q1 k* x
    14. 开始添加超链接,# i; ]: v# F# P) r7 S: p
    15. 开始清理辅助标记,
      , p8 ^- M: Y0 x
    16. 开始写入文本,2 F# z: _' f$ y9 L- k( E! N
    17. Traceback (most recent call last):, O, C, n4 y. M8 W
    18.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 219, in <module>
      , W- @1 O' X! R3 T, E: R
    19.     main()% j5 [( Z, e+ N3 {
    20.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 213, in main0 P( x+ O9 Y& y& n9 \# @4 k
    21.     mdxFormat(path,outputPath)
      2 p; E* I9 u3 x- M- f5 a1 T5 L
    22.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 198, in mdxFormat
      , e0 m+ e8 U. w- u1 Q
    23.     if writeTxt(txt,outputPath):
      ' i% a1 X0 K+ D1 A$ c* T
    24.   File "/Users/vivian/Downloads/mdxFormat_upload_V3.5/mdxFormat_upload_V3.5.py", line 48, in writeTxt6 Q6 D0 @( R; K* L" y# X8 B
    25.     os.mkdir(path)
      3 \9 _; C0 {; {3 w" h  ]
    26. FileNotFoundError: [Errno 2] No such file or directory: ''
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-6 22:34:08 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:166 I3 E: h" J9 T/ _" B
    我的版本是 3.9.7  , 遇到了问题 。请帮助

    6 w  z; N* A6 a: a0 b6 T. qmdxFormat读取文件的路径是绝对路径。你得在mdxFormat_upload_V3.5.py-中设置下文本文件的路径。有个变量“path”

    该用户从未签到

     楼主| 发表于 2021-10-6 22:47:27 | 显示全部楼层
    漫步云海涧 发表于 2021-10-6 20:16
    * ^! e  s6 M& q我的版本是 3.9.7  , 遇到了问题 。请帮助
    , v7 m: a* X; Q/ y/ c
    你把在“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
    * N/ x4 M1 J+ {+ a' Z" P' u你把在“mdxFormat_upload_V3.5.py”中修改的代码贴出来看下。
    $ @  W# r& @6 _7 O
    好的!!  麻烦了
    0 z$ m) x6 r7 m, f$ ?# \% a5 R, R/ l* a5 f: z
    1. import os& L, p2 }# _$ D1 k' t- S
    2. import glob& w6 c& ^' o, z% J. [3 N
    3. import re
      0 _# m1 D. z2 v0 S
    4. import time* S0 T1 q& S# x3 F- o4 D# B7 `

    5. ; X# ?* y2 w7 g4 x6 H4 ]
    6. #遍历所有子文件
      6 n  U4 v7 c( e, U5 ]
    7. def getFileListAll(filePath):) e% z) v: w; i( v; \
    8.     filelist=[]+ ^+ i  C' I3 l* Z$ Z) Y2 M
    9.     for root, dirnames, filenames in os.walk(filePath):
      / e9 l4 @4 ^, v  m0 V* ?3 J
    10.         for filename in filenames:
      ) c0 _  H7 m6 }  J
    11.             filelist.append(os.path.join(root,filename))" F/ N4 F- U4 Q) L
    12.             #print(os.path.join(root,filename))
      * m) K$ e; z5 ?( w# }
    13.     return filelist
      & _  y0 r9 V0 |0 Y7 e: i

    14. ' E0 v5 p* V/ c9 ^
    15. #判断是否为txt文档( o/ O  Y6 O& _: s2 P* Q/ R
    16. def isTxts(nameList):
      8 s- y9 a1 W; ?- ^& ~& O, J
    17.     pattern=r"^[^~$].+\.(txt)$"    % F/ J1 ?8 M$ [. D( M
    18.     patternObj=re.compile(pattern,re.I)2 x# N& e, v% f' I- b6 v1 E
    19.     notTxtList=[]$ y4 c, M. M, w! Z% n5 M0 X* J
    20.     for fileName in nameList:
      # g) `. y! }* H% ~1 L
    21.         if not patternObj.fullmatch(fileName):   #判断是否为txt文件   
      5 }) j" U. P! B4 |( w; a, ^" _1 \" t
    22.             notTxtList.append(nameList)
      8 S( d; C  p  T# ]
    23.     if notTxtList:* D/ ?' v1 p+ m
    24.         print("存在非txt文件:{0:},请处理后再运行程序!".format(notTxtList))
      . ?! I8 t0 F. {, a' e6 ~
    25.         return False2 E, D4 }* L4 ~1 d! V- b7 O
    26.     else:  ?" C% y& {1 l' H% w
    27.         return True   
      : ^( H" c7 r# L: x$ y* H# [; b) q
    28. $ N; D0 e, ^3 W  m
    29. #在指定的txt文档中查找关键字
      . u8 U, s  S; |
    30. def readTxt(fileName):#strkey:查找的关键字;fileName:文件路径
      . a4 a/ r, n6 L8 Y' @2 ^
    31.     pattern=r"^[^~$].+\.(txt)$"   
      0 v8 c7 H4 ^$ D& t; K# s7 S( I
    32.     patternObj=re.compile(pattern,re.I)- m/ c/ F# h9 `, @
    33.     if patternObj.fullmatch(fileName):   #判断是否为txt文件             % g4 q4 x2 u# g0 [8 R) _0 {* B* }8 @. h
    34.         try:
      2 n/ D0 K- F& u6 n/ U3 V- V
    35.             f=open(fileName,"r",encoding="utf-8")0 X. W. `: h  [9 j3 \
    36.             txt=f.read()
      4 U) u$ C: U: _' G( a! G% @0 @
    37.             f.close()            ( T' k! O7 D0 g$ z
    38.         except:
      / S! `! x$ k* e, p7 G
    39.             print("读取文档失败:{0:}".format(fileName))- q* d4 J& {# |
    40.             return ""            ! L% d% M7 P( X4 b
    41.         else:   #无异常时,执行- I! ^$ p, m& p- T% f
    42.             return txt
      $ T; l) Q% ^8 E- e4 D6 F
    43.         #finally:    #无论是否异常,都执行; a; t8 z0 y' J/ }; X* ?! G

    44. ) \$ Q$ g6 ^* i) D
    45. def writeTxt(txt,outPath):
      2 H! y* Z: `# r- Q; S4 @) W
    46.     path="\".join(outPath.split("\")[0:-1]). l$ j3 {$ ^" V9 o. ]9 H0 v! U
    47.     if not os.path.exists(path):
      ; h4 F9 Z9 a6 m0 j- W# f
    48.         os.mkdir(path)    $ g% ?6 l* P% q. {! \) q4 T' b7 T' i
    49.     try:
      1 S4 {7 ^2 R& d/ x6 |
    50.         f=open(outPath,"a",encoding="utf-8")1 C) f1 g: Q3 p1 P
    51.         f.write(txt)6 C8 X  }8 f% p( l1 ]9 J
    52.         f.close()
      . Q& P7 O% m! o) t
    53.         return True            7 ^, C1 E- |" Y8 p
    54.     except:, F# M; I" Z4 g1 L$ y
    55.         print("写入文档失败:{0:}".format(outPath))0 D6 [) y7 F; F( R& ^
    56.         return False
      ) z/ q9 b3 Q2 g5 ~( W$ B  P  N
    57.         #else:   #无异常时,执行
      + A4 b  ?3 s1 L6 d$ W  i
    58.         #    return txt
      ' h" a' d3 J2 q! t' V
    59.     #finally:    #无论是否异常,都执行
      9 E, U4 t; W$ r) G
    60. 1 M+ `2 k/ k/ ]+ J
    61. def getfileName(fileList):2 l  E2 t. Y1 Z2 W: S1 J- q
    62.     '''+ c6 T' g1 j6 A1 T# x& r
    63.     :param fileList:文件路径列表) r( ~: Z# F% e. W  e
    64.     :return nameList:文件名称列表有扩展名! X% H  T) T. ?3 S) B" N! X" k1 p
    65.     '''
      6 s9 g8 F* B* `9 N( o
    66.     nameList=[]
      / M5 i/ f9 r3 f: t" L
    67.     for fileName in fileList:
      0 B9 J3 Q0 y+ N3 ]
    68.         name=fileName.split("\")[-1]#提取文件名
      5 P2 p# }0 l. C, s
    69.         nameList.append(name)
      / r1 t* p4 M" Q) @% E
    70.     return nameList; R5 Y2 Q9 u3 a+ _8 Q" [; d8 G
    71. 7 k) K8 J- f5 C% O1 [- N8 b
    72. #显示重复的文件名,如果有重复文件显示重复的文件名称,并返回False,否则返回True4 ^3 z/ i! X8 _% {
    73. def showDupFile(nameList):4 W4 j3 U. Z' X
    74.     '''0 L% M$ f* L; s
    75.     判断是否有文件名相同的文件  Q" V4 o0 I/ c5 y/ U9 b5 o! G
    76.     :param fileList:文件名列表,包含绝对路径
      ( V  `) K. F: A2 s" U
    77.     :return: 如果有重复文件显示重复的文件名称,并返回False,否则返回True5 ^# O( x: {8 V+ s+ J, \
    78.     '''1 i6 ]: h# L' Q1 h8 ^
    79.     if nameList:    #如果文件名列表不为空9 g1 J# k9 p: Z
    80.         nameSet=set(nameList)6 F! g1 @& ~# A4 J7 t
    81.         DupNameList=[]
      ( ]. S3 p, i% I+ i5 Q7 ]- @2 E5 e
    82.         for item in nameSet:4 z) s. w! ?3 D& u
    83.             if nameList.count(item)>1:
      8 b8 h8 x  u/ `5 j3 |( V
    84.                 DupNameList.append(item)% L' `8 I1 _/ v  N# V' j* B
    85.         if DupNameList:#保存重复文件名的列表
      , `6 W) J% Q% L" U
    86.             for L in DupNameList:4 V6 v6 F+ a1 M; e7 V9 `; ]  ]
    87.                 print("{0:}为重复的文件,请处理!".format(L))
        d  y7 l+ @) k, r& }# {
    88.             return False
      # t) v1 @. G. H7 [  }' A" u+ W
    89.         else:  ?; Y0 g, C8 Q
    90.             print("没有发现文件名相同的文件,处理中...")
      ' e  f0 r8 O& ?1 v$ i* _
    91.             return True
      6 {" J2 k7 c8 @% v

    92. + g# y6 v$ {3 v; e1 ~( A" \
    93. def nameListSort(nameList,rev=True):
      % [3 g9 d# S0 B! H; {
    94.     '''% E/ H4 c, N  A& i: |
    95.     按照字符串长度排序. d. I1 a6 D( Q/ [! ^  h
    96.     :param fileList:文件名列表
      , G  q8 ^. f$ R! r
    97.     :param reverse:默认降序  {5 r+ I! V  c( F
    98.     :return newNameList:返回排序后的文件名新列表' |  c& o4 H4 q. w* v6 x8 Y7 D6 Q: f
    99.     '''
      0 b; _0 B% V9 K
    100.     newNameList = sorted(nameList,key = lambda i:len(i),reverse=rev) #按照字符串长度排序,降序; J3 ]3 R- t' F' B, M# ]5 \
    101.     return newNameList   
      & S; r$ |( a0 N" n+ ^

    102.   g1 V) C, v2 i" t4 H* a5 }
    103. #添加超链接5 K5 x8 i  m& @0 l" ?  G! l. f6 l
    104. def formatTxtHref(nameList,txt):
      & X$ o0 i/ o/ b* I  x
    105.     '''
      * J* H' x  H3 Z1 m1 v4 n
    106.     func:在文本中为特定字符串添加超链接
      ! i4 h8 C9 ]2 M0 M9 I- A9 ?* |
    107.     :param hrefStr:待添加超链接的字符串8 }/ c/ b% s8 f, V9 ^$ x& g, g. K
    108.     :param txt:文本字符串
      % t8 O2 Q4 C! K& T- x
    109.     :return txt:格式化的文本字符串
      3 N1 N, u1 c0 v% D
    110.     '''
      ' s/ _& G' j! G8 ~
    111.     print("\n开始循环添加超链接关键词辅助标记:")! d- v# s, v. ^: G% A6 P
    112.     count=0$ c( k2 }& _- \, B1 f+ A. K
    113.     nameListDescend=nameListSort(nameList)$ q! `' }3 P3 ?5 A& Y
    114.     for nameD in nameListDescend:
      : K, f6 y7 S: e# a: E
    115.         nameDSimple=nameD.replace(".txt","")8 N$ n) l: C4 v/ b7 R; [; j5 h$ ^0 {
    116.         nameDSMarked="【@"+nameDSimple+"@】"% K4 ~6 X+ a% C2 G  k1 H  p* [9 H
    117.         txt=txt.replace(nameDSimple,nameDSMarked)7 h1 K: ^- V1 {" W; d8 ^& ^. N' P
    118.         count=count+1
      " l5 E* }) V% o! h" z  z+ D% h
    119.         print("\r已完成第{0: ^6}个".format(count),end="")     / J. E& m" u  T. `
    120. 6 u5 _$ H4 ~, Q1 s: R6 m
    121.     print("\n开始循环清理嵌套的冗余的超链接关键词辅助标记:")# O0 V& k; R$ I5 |/ G* @
    122.     count=0- w3 F% r, G' |& M& m
    123.     nameListAscend=nameListSort(nameList,rev=False)
      1 K+ X$ J9 p+ E7 K
    124.     for nameA in nameListAscend:
      0 l0 ?6 F$ e0 ]8 f( s4 t# \" F
    125.         nameA=nameA.replace(".txt",""). W+ l3 \' O9 v) t
    126.         pattern=r"【@([^@】]*?)【@{0:}@】".format(nameA)        $ x' Q) ]: G! C1 `
    127.         patternObjTxt=re.compile(pattern)
      ; q7 c3 T/ b6 y5 O: E, b
    128.         toHrefStr="【@"+"\\1"+"muyubug"+nameA2 D1 H4 D% |) }& Q& y2 ?
    129.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      9 a9 X1 t+ p! A! u& X6 u
    130.    
      ( _) i9 f, c$ |: P8 K  ?0 {, \! n
    131.         pattern=r"【@{0:}@】([^【@]*?)@】".format(nameA)        
      + O/ {; `% K' }$ b+ R
    132.         patternObjTxt=re.compile(pattern)7 T6 @% }% T; v1 y
    133.         toHrefStr=nameA+"\\1"+"muyubug"+"@】"
      ( m/ W) E9 a& s/ x
    134.         txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
        Y9 I0 c% |* w  m6 u! J. L, M
    135.         txt=txt.replace("muyubug","")
      " Z5 `- F% O2 I3 l' p6 m: f
    136.         count=count+1/ d- i- l8 j3 V& l
    137.         print("\r已完成第{0: ^6}个".format(count),end="")
      ! O* p: \5 `* x, h' a$ }* r
    138.    
      ; I7 A- y' @" w+ w6 m4 e; d( T" s# S
    139.     print("\n开始添加超链接,") , \& k$ L8 w* V
    140.     pattern=r"【@([^【@]+?)@】"
      * ]! d1 M$ ^! ~  r: z
    141.     patternObjTxt=re.compile(pattern)/ J1 r  T/ h" i7 d% h8 [
    142.     toHrefStr=r"<a href='entry://\1'>\1</a>"5 U8 k) n' W; s4 O; F" a; w
    143.     txt=patternObjTxt.sub(toHrefStr,txt,count=0) #替换为的字符串
      - w9 s' t/ U8 n/ }. P* D
    144.         : [, H4 Y# Z6 ^! X3 t) O6 s) y
    145.     print("开始清理辅助标记,") ) ^6 W- b& r# X, W3 Z. B
    146.     txt=txt.replace("<@>","")& s7 Q" _' p& j$ R/ e+ q
    147.     return txt
      + c5 o. c: R9 k7 k- T

    148. . i2 o8 a% _# i% H( Y4 O, a
    149. def formatText(fileName):. S$ a8 ?0 a: F. z7 R
    150.     '''8 Z/ u7 G; O1 S8 g, `4 d
    151.     func:清洗字符串,格式化4 H$ W, r% w1 N0 y  g
    152.     :param fileName:待处理文件! W1 v  a& l$ Z+ R. ]1 Q  R* w3 z
    153.     return txt:处理后的字符串1 `; O# d: b1 D8 M1 W
    154.     '''
      ! H7 _5 v: y0 G# ?
    155.     #提取文件名
      $ b, L* g% c4 Z) G2 \
    156.     name=fileName.split("\")[-1].replace(".txt","")
      . ?( D! y9 ]1 a! o! `5 v
    157.     #在文件名的每个字符键添加标记符6 H; z. Y; }9 ]# _6 f' ~+ L3 U
    158.     pattern = re.compile('.{1,1}'); @( Z3 K4 y1 a' b5 f
    159.     matchCharList=pattern.findall(name)! `( y$ x0 P1 q1 d: A
    160.     nameMaked="<@>".join(matchCharList)
      $ D( y$ `; F( k
    161.     #生成标题部分3 f6 C% j6 W& Q4 p  O
    162.     txtTitle=nameMaked+"\n"
      - f9 t% T# n% h
    163.     #读入文件$ ?: a1 t; N1 y, C+ m8 N
    164.     txtContent=readTxt(fileName)            # d% q2 c/ L3 \! S4 w& Z" G
    165.     #替换正文中的特殊字符
      + S8 T$ ^$ o, E4 i" g" X7 a2 c, R
    166.     strList=["\n","<br>"]   
      % i( c- |+ X5 n* Z
    167.     for ch in strList:
      8 J: J3 t  G3 i+ g
    168.         txtContent=txtContent.replace(ch,"<BR>")
      $ R  m0 }( H6 e8 u# ]& G
    169.     #合成整个词条的内容5 Q* g9 f, I4 S, @% P" W5 T
    170.     txt=txtTitle+txtContent+"<BR>\n</>"
        ~! [! E* W% O2 T
    171.     return txt; @6 T" n( l5 h8 |/ A  j: F

    172. % z+ e; n, }5 M3 _& u8 \. a. g
    173. def mdxFormat(path,outputPath):
      : X  T: x. ^3 H
    174.     '''6 v- `8 E+ X6 z2 o* }+ f
    175.     func:格式化文本
      7 z: q  b/ d& ?
    176.     :param path:待格式化文本的路径+ i5 _3 s" s+ g+ v* [7 r* j' [1 b
    177.     :param outputPath:输出的路径和文件名" H5 ?- ~( x3 V$ x
    178.     '''
      , Z. ]9 Z: q3 t) z1 ^; a, P
    179.     fileList=getFileListAll(path)#获取指定目录下的全部文件,包括子目录中的文件) e' d7 h; y. k
    180.     nameList=getfileName(fileList)
      5 c1 s2 v7 @( p5 @2 v
    181.     if isTxts(nameList):* @. ~% Y, @& N, |. T; `2 F
    182.         if showDupFile(nameList):#如果没有重复文件/ G' o& |( l+ u8 L- t$ ]: ^# A! w. [
    183.             print("找到了{0:}个txt文档,".format(len(nameList)))
      4 k; T/ m% \/ K

    184. 3 H' f0 E4 w& t- d$ q
    185.             print("开始格式化、合并文档:") : t1 f% y7 s; T3 u5 s4 l
    186.             count=0#txt文档数量统计
      ; z: _; x" z$ z1 F9 a: Z% a9 b
    187.             txtList=[]#存储文件内容
      + k6 G+ w4 m8 D) r, A$ q
    188.             for fileName in fileList:                ; M  ?6 J$ m# d8 R8 f+ K- d. D) ~
    189.                 txt=formatText(fileName) #转换换行和<br>为<BR>                   ; c2 ^3 v0 G1 D+ w
    190.                 txtList.append(txt)# X2 }: g" e5 {0 c
    191.                 count+=17 x5 _) n' J6 a) G! M. t$ v
    192.                 print("\r已完成第{0: ^6}个".format(count),end="")                  
      + C6 W$ g! q% H5 S& h# ?
    193.             txt="\n".join(txtList)0 ]) ?- D$ v; D, D. E" ^8 [
    194.             % l4 u% G( a4 ?" r' K% q
    195.             #添加超链接; u/ L$ B6 `- i( i9 m: R+ r7 _9 V/ P
    196.             txt=formatTxtHref(nameList,txt)
      7 N- h5 o2 ^; t! O: l
    197.             print("开始写入文本,")
      3 b4 R% p& H/ \7 j
    198.             if writeTxt(txt,outputPath):
      4 f$ e8 r: K& F
    199.                 print("文件合并输出成功!")/ g; j5 Q: r! D) S/ V
    200.             else:4 ]- l( m% u0 s4 ]
    201.                 print("Error:Merge!")
      ! K) Y2 S( t% T, e$ C
    202.                 return  
      0 q$ G. s0 }6 L
    203.                
      2 }" N* S' P% L( Y# k: O- |4 g
    204. def main():
      2 m" ?" f1 \" r
    205.     timeStart = time.time()/ B: J; @7 n" h# B

    206.   h8 q# Q. g3 S' k
    207.   G/ a( p+ g0 f
    208. ( D+ y, s+ R. |0 r7 Y0 B7 F" H
    209.     path=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"7 \) D; B7 L% z- Q
    210.    
      ; ^7 o: b0 n6 p% a+ }8 k7 d
    211.     outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
      ) X$ [& Y% C0 Y$ F" e2 A
    212.     0 g4 D+ V* l* v9 Z9 A. X  F$ L; M# _7 y, ~
    213.     mdxFormat(path,outputPath)
      " G+ D! O  k% f8 w* X) v

    214. 2 x# X. v1 q; D
    215.     timeEnd = time.time()5 c9 Z4 q4 Y* b
    216.     print("程序运行了%d秒"%(timeEnd-timeStart)); ]9 V6 p/ A4 w8 j
    217. 2 ~# m- c8 L+ J  E1 X8 Z/ J. k5 O4 U+ }
    218. if __name__ == '__main__':
      - g  g( I' ^: l! N3 C3 q
    219.     main()
      6 l/ h6 f7 x. ~+ T0 ~. j5 ?
    复制代码

    该用户从未签到

     楼主| 发表于 2021-10-7 19:54:52 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:59, W8 [8 n9 s1 X' A8 X* w
    好的!!  麻烦了
    + M  t1 E0 [; H: v& }2 H- |: O
    你修改了哪条?

    该用户从未签到

     楼主| 发表于 2021-10-7 21:48:13 | 显示全部楼层
    漫步云海涧 发表于 2021-10-7 07:592 G; E: J9 ~& J
    好的!!  麻烦了

    : z/ I$ I; Y% {& M/ dpath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"3 s& \! ?: D5 }6 b( x
    outputPath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/output/demo.txt"
    0 h" p. @, ?5 f3 h( W这两条有问题吧,应该是下面这个格式: J/ U6 Q5 j/ }( S8 q5 {5 L
    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
    + @  U  _8 h  `8 Qpath=r"/Users/vivian/Downloads/mdxFormat_upload_V3.5/test"
    $ H  I1 d) ^) c' w8 W* e- z. ?2 MoutputPath=r"/Users/vivian/Downloads/md ...
      ~5 A4 r. l+ W* t( P8 h
    我用的是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
    9 M6 v# J5 x2 y弄个windows操作界面该多好

    8 P0 r; b, d. `9 e3 Osorry!算法还不完善,需要的人也不多,空闲时间比较少....暂时没有写GUI的打算
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-26 13:44 , Processed in 0.082751 second(s), 14 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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