我有这段文字,我会分享一部分,
罗密欧
但是,柔软!窗外有什么光线打破?
它是东方,朱丽叶是太阳。
朱丽叶
me!
罗密欧
她说:
哦,再说一次,聪明的天使!因为你
朱丽叶
罗密欧,罗密欧!为何你偏偏是罗密欧?
否认你的父亲,拒绝你的名字;
罗密欧
请问我能听到更多吗?
我想编写一个循环,在行中查找名称并将其后的内容保存到特定文件中,在这种情况下,如果“ ROMEO”是找到的单词,则将其保存到“ Romeo.txt”中的每一行,直到找到单词“ JULIET”,然后将所有内容保存到“ Juliet.txt”。我尝试通过合并循环和if语句自己对它进行编码,但这使我无所适从。
句柄=打开(“ romeo-full.txt”)
船长=“ ROMEO”
handle = open("romeo-full.txt")
skipper = "ROMEO"
for line in handle:
line = line.strip()
while skipper == "ROMEO":
print(line) #This would be the write to file code
if line.startswith("ROMEO"):
skipper = "JULIET"
break
else:
continue
while skipper == "JULIET":
print(line) #This would be the write to file code
if line.startswith("ROMEO"):
skipper = "ROMEO"
break
else:
continue
输出基本上是“ ROMEO”行循环,我知道它永远来自循环通过第一行的while循环,但是我找不到比这更接近我想要的方法。
最佳答案
避免重复代码的一种方法是将主文件中的标头用作要写入的文件的“选择器”。就像是:
with open("romeo-full.txt") as handle, \
open("romeo.txt", 'w') as r_f, \
open("juliet.txt", 'w') as j_f:
file_chooser = {"ROMEO": r_f,
"JULIET": j_f}
for line in handle:
try:
cur_file = file_chooser[line.strip()]
except KeyError:
cur_file.write(line)
try/except
块的目的是仅在遇到标题之一(然后跳过它)时才更改cur_file
。避免这种情况的一种方法是将dict的
get
方法与默认值cur_file
一起使用(因此它仅在标头上更改):with open("romeo-full.txt") as handle, \
open("romeo.txt", 'w') as r_f, \
open("juliet.txt", 'w') as j_f:
file_chooser = {"ROMEO": r_f,
"JULIET": j_f}
cur_file = r_f
for line in handle:
cur_file = file_chooser.get(line.strip(), cur_file)
cur_file.write(line)
不利之处在于,标头也将每次都写入文件中。