我有一个西里尔文的.txt文件。它的结构就像那样但是用西里尔语:
city text text text.#1#N
river, text text.#3#Name (Name1, Name2, Name3)
lake text text text.#5#N (Name1)
mountain text text.#23#Na
我需要什么:
1)看一行中的第一个单词
2)如果是“河流”,则在“#3#”之后写下所有单词,即名称(Name1,Name2,Name3)在文件'river'中。
我还要用行中的另外第一个单词来做,i。即城市,湖泊,山脉 我所做的只发现第一个单词是“city”并将整行保存到文件中:
lines = f.readlines()
for line in lines:
if line.startswith('city'):
f2.write(line)
f.close()
f2.close()
我知道我可以使用正则表达式查找名称:#[0-9] +#(\ W +)但我不知道如何将其实现为代码。
我真的需要你的帮助!我很高兴能得到任何帮助。
答案 0 :(得分:0)
如果你所有的河流都在他们之后,就像你发布的上述代码一样,我会做类似的事情:
for line in f.readlines():
items = line.split("**,")
if items[0] == "**river":
names = line.split("#")[1].strip().split("(")[1].split(")")[0].split(",")
names = [Name1, Name2, Name3]
#.. now write each one
答案 1 :(得分:0)
这里要做的是避免硬编码所需文件的名称。相反,从输入文件中收集。创建您需要写入的文件的字典,根据需要打开每个文件。这样的事情(未经测试,可能需要一些调整):
outfiles = {}
try:
with open("infile.txt") as infile:
for line in infile:
tag = line.split(" ", 1)[0].strip("*, ") # e.g. "river"
if tag not in outfiles: # if it's the first time we've seen a tag
outfiles[tag] = open(tag = ".txt", "w") # open tag.txt to write
content = line.rsplit("#", 1)[-1].strip("* ")
outfiles[tag].write(content + "\n")
finally:
for outfile in outfiles.itervalues():
outfile.close()