Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解析文本文件?_Python_String_Parsing_Text Files - Fatal编程技术网

用Python解析文本文件?

用Python解析文本文件?,python,string,parsing,text-files,Python,String,Parsing,Text Files,我必须做一个作业,其中我有一个.txt文件,其中包含如下内容 p 没有人喜欢痛苦本身,没有人追求痛苦,也没有人想要痛苦 拥有它,仅仅因为它是痛苦 h1 这是该文本文件的另一个示例 我想写一个python代码来解析这个文本文件,并创建一个XML和xhtml文件 我需要为这个项目找到一个起点,因为我对python非常陌生,对很多东西都不熟悉。 假设此python代码从该文本文件中获取这些“标记”,并将它们放入一个xhtml文件中,我希望我的要求对您有意义。 非常感谢您的帮助, 提前谢谢 -bojan

我必须做一个作业,其中我有一个.txt文件,其中包含如下内容
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更好,但对于初学者来说,这更容易理解。