我有一个大的文本文件,看起来像:
....
sdsdsd
..........
asdfhjgjksdfk dfkaskk sdkfk skddkf skdf sdk ssaaa akskdf sdksdfsdf ksdf sd kkkkallwow.
sdsdllla lsldlsd lsldlalllLlsdd asdd. sdlsllall asdsdlallOEFOOASllsdl lsdlla.
slldlllasdlsd.ss;sdsdasdas.
......
ddss
................
asdfhjgjksdfk ddjafjijjjj.dfsdfsdfsdfsi dfodoof ooosdfow oaosofoodf aosolflldlfl , dskdkkfkdsa asddf;akkdfkdkk . sdlsllall asdsdlallOEFOOASllsdl lsdlla.
slldlllasdlsd.ss;sdsdasdas.
.....
xxxx
.......
asdfghjkl
我想将文本文件拆分为多个小文本文件,并在发生…时将其保存为.txt。。。。。[多个周期标记]像一样保存
group1_sdsdsdd.txt
....
sdsdsd
..........
asdfhjgjksdfk dfkaskk sdkfk skddkf skdf sdk ssaaa akskdf sdksdfsdf ksdf sd kkkkallwow.
sdsdllla lsldlsd lsldlalllLlsdd asdd. sdlsllall asdsdlallOEFOOASllsdl lsdlla.
slldlllasdlsd.ss;sdsdasdas.
group1_ddss.txt
ddss
................
asdfhjgjksdfk ddjafjijjjj.dfsdfsdfsdfsi dfodoof ooosdfow oaosofoodf aosolflldlfl , dskdkkfkdsa asddf;akkdfkdkk . sdlsllall asdsdlallOEFOOASllsdl lsdlla.
slldlllasdlsd.ss;sdsdasdas.
和
group1_xxxx.txt
.....
xxxx
.......
asdfghjkl
我已经认为,通过使用以下某种正则表达式可以完成
txt =re.sub(r'(([^ws])2+)', r' ', txt).strip() #for letters more than 2 times
但不能完全弄清楚。
保存的文本文件应命名为group1_sdsdsd.dtxt、group1_ddss.txt和group1_xxxx.txt[group1是特定大文本文件的标识符,因为我有多个更大的文本文件,需要对所有文件执行相同操作才能知道我正在拆分哪个大文本文件。
如果你想只在同一行上获得多个点的零件,你可以使用并获得单独的零件,可以使用这样的模式:
^.{3,}n(S+)n.{3,}(?:n(?!.{3,}nS+n.{3,}).*)*
解释
^
字符串开始.{3,}n
匹配3个或多个点和一条换行符(S+)n
在组1中捕获文件名的1+个非空白字符,并匹配换行符.{3,}
匹配3个或更多点(?:
非捕获组作为一个整体重复n
匹配换行符(?!.{3,}nS+n.{3,})
否定前瞻,断言从当前位置来看,我们没有看到与点匹配的模式,文件名介于两者之间.*
全线匹配
)*
关闭非捕获组并可选择重复
然后可以使用re.finditer循环匹配,并使用组1值作为文件名的一部分。
请参阅包含单独部分的regex演示和Python演示。
示例代码
import re
pattern = r"^.{3,}n(S+)n.{3,}(?:n(?!.{3,}nS+n.{3,}).*)*"
s = ("....your data here")
matches = re.finditer(pattern, s, re.MULTILINE)
your_path = "/your/path/"
for matchNum, match in enumerate(matches, start=1):
f = open(your_path + "group1_{}".format(match.group(1)), 'w')
f.write(match.group())
f.close()