根据某种模式在Python中将文件拆分为多个文件
这个文本文件的内容是这样的:
shfhsgfkshkjg
gkjsfkgkjfgkfg
model 1
lkgjhllghfjgh
kjfgkjjfghg
endmodel
model 2
jfhkjhcgbkcjg
xhbgkxfkgh
endmodel
我想要在每个“model”和“endmodel”之间的内容,这些内容应该放在新文件里。而新文件的名字应该像“model1”、“model2”这样的,可能会有100个或者更多。而“model”和数字之间的空格要正好是8个空格。请帮帮我。
3 个回答
这样做就可以解决问题:
fileName = "text.txt"
inputfile = open(fileName, 'r').readlines()
files = {}
storeContent = False
content = ""
for line in inputfile:
if "endmodel" in line.strip() and storeContent:
files [storeContent] = content
storeContent = False
elif "model" in line:
storeContent = line.replace(" ", "").strip()
elif storeContent:
if not content:
content += line
else:
content += "\n" + line
else:
pass # ignore other content
for name, content in files.items():
f = open(name + ".txt", "w")
f.write(content)
f.close
You can use below function to do this. This is based on below assumptions: 1. There are some junk characters before first model appears 2. after every endmodel there is model.
这个代码的主要功能是读取一个叫做'test.txt'的文件,然后根据文件里的内容,创建新的文件。
首先,代码定义了一个叫做file_read的函数。接下来,它设置了一个路径'D:\\',这是用来存放新文件的地方。
然后,代码打开了一个叫'dummy.txt'的文件,准备写入内容。同时,它也打开了'test.txt'文件,准备读取里面的内容。
接下来,代码初始化了一个计数器count,初始值为0。这个计数器用来记录找到的'model'的数量。
代码开始逐行读取'test.txt'文件的内容。对于每一行,它会检查这行内容:
- 如果这一行以'endmodel'开头,代码就会跳过这一行,不做任何处理。
- 如果这一行以'model'开头,计数器count就会加1,并且会创建一个新的文件,文件名是'model'加上当前的计数值,比如'model1.txt'、'model2.txt'等等。
- 如果这一行既不是'endmodel'也不是'model',那么这行内容就会被写入到当前打开的文件中。
最后,代码会继续处理'test.txt'中的其他行,直到所有行都被读取完。
如果你在使用这个代码时遇到问题,可以告诉我。
在编程中,有时候我们需要处理一些复杂的情况,比如在代码运行时出现错误。这时候,我们就需要用到“异常处理”。简单来说,异常处理就是一种机制,可以帮助我们在代码出错时,优雅地处理这些错误,而不是让程序直接崩溃。
想象一下,你在做一道数学题,突然发现公式用错了。如果没有异常处理,你可能会一直卡在那儿,无法继续。但如果有异常处理,就像是你有一个备用的解决方案,可以让你跳过这个错误,继续完成其他的题目。
在编程中,我们通常会用一些特定的语法来实现异常处理。比如,我们可以用“try”来尝试执行一些代码,如果这段代码出错了,就会跳到“catch”部分,处理这个错误。这样,程序就不会因为一个小错误而停止运行。
总之,异常处理就像是给我们的程序加了一层保护,让它在遇到问题时能够更好地应对,而不是直接崩溃。
def writeFiles(infilepath):
outfile = None
with open(infilepath) as infile:
for line in infile:
line = line.strip()
if line.startswith('model') and outfile is None:
outfile = open(line, 'w')
continue
elif line == 'endmodel':
outfile.close()
outfile = None
continue
elif outfile is not None:
outfile.write(line + '\n')