跳转至

小工具:从多文件中收集字符串

目标、步骤#

如果你想从很多文本文件中把一定格式的字符串收集在一起,可以使用下面的Python脚本。你需要做:

  • 保存脚本,后缀为.py
  • 根据你的实际情况更改脚本中的设置部分,尤其是:
  • 用正则表达式表示你要收集的字符串
  • 在命令行中运行脚本(或看看右键菜单[打开方式]中有没有[Python])
  • 看看out.txt文件中有没有你要的东西

代码#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"""
# reCollectString.py
# 收集指定路径下、指定后缀文件中的匹配字符串,并记录文件名和行号。
# 适用于Python3
# 要处理的文件编码应为:utf-8(无签名)
"""
import os, re

# 要处理的文件所在路径
DIR = "./workDir"
# 要处理的文件后缀列表
EXT = ['.txt', ".md"]
# 输出文件(含路径)
OUT_FILE = "./out.txt"
# 要查找的字符串(正则表达式),请按需设置
r = re.compile(r'\[.*?\]')

with open(OUT_FILE, "w", encoding="utf-8") as outFile:
    filesNum = 1
    for root, __, files in os.walk(DIR):
        lesson_cut_file_list = [x for x in files if os.path.splitext(x)[1] in EXT]
        for file in lesson_cut_file_list:
            with open(os.path.join(root, file), "r", encoding="utf-8") as f:
                # for line in f.readlines():
                for index, line in enumerate(f):
                    lineStrip = line.strip()
                    finds = r.findall(lineStrip)
                    if finds:
                        for i in finds:
                            outLine = "{path}\t{index}\t{string}\n".format(path=os.path.join(root, file), index=index + 1, string=i)
                            if outLine:
                                outFile.write(outLine)
            print(filesNum, "files done.")
            filesNum += 1

效果#

小工具:从多文件中收集字符串

评论