用Python解析文本文件?
我必须做一个作业,其中我有一个.txt文件,其中包含如下内容用Python解析文本文件?,python,string,parsing,text-files,Python,String,Parsing,Text Files,我必须做一个作业,其中我有一个.txt文件,其中包含如下内容 p 没有人喜欢痛苦本身,没有人追求痛苦,也没有人想要痛苦 拥有它,仅仅因为它是痛苦 h1 这是该文本文件的另一个示例 我想写一个python代码来解析这个文本文件,并创建一个XML和xhtml文件 我需要为这个项目找到一个起点,因为我对python非常陌生,对很多东西都不熟悉。 假设此python代码从该文本文件中获取这些“标记”,并将它们放入一个xhtml文件中,我希望我的要求对您有意义。 非常感谢您的帮助, 提前谢谢 -bojan
p
没有人喜欢痛苦本身,没有人追求痛苦,也没有人想要痛苦 拥有它,仅仅因为它是痛苦 h1
这是该文本文件的另一个示例 我想写一个python代码来解析这个文本文件,并创建一个XML和xhtml文件
我需要为这个项目找到一个起点,因为我对python非常陌生,对很多东西都不熟悉。
假设此python代码从该文本文件中获取这些“标记”,并将它们放入一个xhtml文件中,我希望我的要求对您有意义。
非常感谢您的帮助,
提前谢谢
-bojan与其直接从您描述的文本文件转换为XHTML文件,不如先将其转换为内存中的中间表示 因此,我将构建类来表示
p
和h1
标记,然后遍历文本文件,构建这些对象并将它们放入列表(或者甚至是更复杂的对象,但从文件外观来看,列表就足够了)。然后我将列表传递给另一个函数,该函数将循环遍历p
和h1
对象,并将它们作为XHTML输出
作为额外的奖励,我将使每个标记对象(例如,段落
和标题1
类)实现一个As\u xhtml()
方法,并将实际格式委托给该方法。然后,XHTML输出循环可能类似于:
for tag in input_tags:
xhtml_file.write(tag.as_xhtml())
我不会直接从您描述的文本文件转换为XHTML文件,而是首先将其转换为内存中的中间表示形式 因此,我将构建类来表示
p
和h1
标记,然后遍历文本文件,构建这些对象并将它们放入列表(或者甚至是更复杂的对象,但从文件外观来看,列表就足够了)。然后我将列表传递给另一个函数,该函数将循环遍历p
和h1
对象,并将它们作为XHTML输出
作为额外的奖励,我将使每个标记对象(例如,段落
和标题1
类)实现一个As\u xhtml()
方法,并将实际格式委托给该方法。然后,XHTML输出循环可能类似于:
for tag in input_tags:
xhtml_file.write(tag.as_xhtml())
您说您对Python非常陌生,所以我将从非常低的层次开始。在Python中,可以非常简单地迭代文件中的行
fyle = open("contents.txt")
for lyne in fyle :
# Do string processing here
fyle.close()
现在如何解析它。如果每个格式化指令(例如p、h1)位于单独的一行上,您可以轻松地进行检查。我会建立一个处理程序字典,并得到如下处理程序:
handlers= {"p": # p tag handler
"h1": # h1 tag handler
}
# ... in the loop
if lyne.rstrip() in handlers : # strip to remove trailing whitespace
# close current handler?
# start new handler?
else :
# pass string to current handler
您可以先创建内存中的数据结构,然后将其序列化到XHTML。在这种情况下,处理程序将知道如何构建与每个标记对应的对象。但我认为更简单的解决方案,特别是如果你没有很多时间,你只需要直接进入XHTML,保留一堆当前包含的标记。在这种情况下,您的“处理程序”可能只是将标记写入输出文件/字符串的一些简单逻辑
如果不知道你问题的具体情况,我就不能多说了。此外,我不想为你做所有的家庭作业。这应该给你一个好的开始。你说你对Python非常陌生,所以我将从非常低级的开始。在Python中,可以非常简单地迭代文件中的行
fyle = open("contents.txt")
for lyne in fyle :
# Do string processing here
fyle.close()
现在如何解析它。如果每个格式化指令(例如p、h1)位于单独的一行上,您可以轻松地进行检查。我会建立一个处理程序字典,并得到如下处理程序:
handlers= {"p": # p tag handler
"h1": # h1 tag handler
}
# ... in the loop
if lyne.rstrip() in handlers : # strip to remove trailing whitespace
# close current handler?
# start new handler?
else :
# pass string to current handler
您可以先创建内存中的数据结构,然后将其序列化到XHTML。在这种情况下,处理程序将知道如何构建与每个标记对应的对象。但我认为更简单的解决方案,特别是如果你没有很多时间,你只需要直接进入XHTML,保留一堆当前包含的标记。在这种情况下,您的“处理程序”可能只是将标记写入输出文件/字符串的一些简单逻辑
如果不知道你问题的具体情况,我就不能多说了。此外,我不想为你做所有的家庭作业。这将给您一个良好的开端。输入文件的格式有些模糊。这可能是它在SO中的显示方式,但是。。。这些“p”、“h1”标记是在应用它们的部分之前的单独一行上,还是它们是类似html的标记,括号和结束标记在这里丢失或省略了?输入文件的格式有些模糊。这可能是它在SO中的显示方式,但是。。。这些“p”、“h1”标记是在应用它们的部分之前的单独一行上,还是像html一样的标记,括号和结束标记在这里丢失或省略了?+1回答得不错。不过,我想强调调用
fyle.close()
(或者更好地使用带有open(“contents.txt”)的作为fyle:
)。这是一个好习惯——让垃圾收集器处理打开的文件通常可以侥幸逃脱,但你真的不应该。你是对的,我按照你的建议添加了fyle.close()
<代码>与。。。as更好,但对于初学者来说,这更容易理解。+1回答不错。不过,我想强调调用fyle.close()
(或者更好地使用带有open(“contents.txt”)的作为fyle:
)。这是一个好习惯——让垃圾收集器处理打开的文件通常可以侥幸逃脱,但你真的不应该。你是对的,我按照你的建议添加了fyle.close()
<代码>与。。。as更好,但对于初学者来说,这更容易理解。