Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex_Parsing_Text Analysis - Fatal编程技术网

把一本书分成几章–;python

把一本书分成几章–;python,python,regex,parsing,text-analysis,Python,Regex,Parsing,Text Analysis,我有一本大书存储在一个纯文本文件中,我想对它进行解析,以便为每个章节创建单独的文件。我找到了一些简单的正则表达式,可以找到每一章的标题,但我很难捕捉其中的所有文本 import re txt = open('book.txt', 'r') for line in txt : if re.match("^[A-Z]+$", line): print line, 我知道这是相当初级的,但我对python还不够熟悉,所以它让我有点困惑。目前我正在一行一行地思考,所以我的思

我有一本大书存储在一个纯文本文件中,我想对它进行解析,以便为每个章节创建单独的文件。我找到了一些简单的正则表达式,可以找到每一章的标题,但我很难捕捉其中的所有文本

import re

txt = open('book.txt', 'r')

for line in txt :
    if re.match("^[A-Z]+$", line):
        print line,
我知道这是相当初级的,但我对python还不够熟悉,所以它让我有点困惑。目前我正在一行一行地思考,所以我的思考过程是:

  • 如果行是章节标题:创建一个新文件“chapter_title.txt”
  • 如果下一行不是章节标题:将该行写入chapter_title.txt
  • 不过,我试图把这一点写出来的尝试并不那么成功。谢谢你的帮助

    编辑:具体来说,我对文件I/O的Python语法感到困惑。我尝试过:

    for line in txt :
        if re.match("^[A-Z]+$", line):
            f = open(line + '.txt', 'w')
        else f.write(line + "\n")
    

    作为我的一般方法,但这不会像我写的那样有效。希望能对构建循环有所帮助。谢谢

    我想这会有用的:

    import re
    
    with open('book.txt', 'r') as file:
        txt = file.readlines()
    
    f = False
    
    for line in txt:
        if re.match("^[A-Z]+$", line):
            if f: f.close()
            f = open(line + '.txt', 'w')
    
        else:
            f.write(line + "\n")
    

    也许我应该补充一些解释:

  • with
    将自动关闭文件。关闭打开的文件很重要

  • readlines()
    函数可以逐行读取文件并将输出保存到列表中

  • 这里我使用的是
    f=False
    。所以第一次
    如果f:
    将是
    False

  • 现在这里很重要,如果文件
    f
    已打开,那么
    if f:
    将为
    True
    ,文件将通过
    f.close()
    关闭(但第一次
    f.close()
    将不会运行)


    然后,
    f=open(line+'.txt',w')
    将文本写入该文件,当
    re.match(“^[A-Z]+$”,line)
    True时,该文件将被关闭,并打开另一个文件,然后再次打开,直到
    txt
    列表为空。

    也许您也可以尝试以下操作:

    import re
    
    with open('book.txt', 'r') as file:
        lines = file.read()
    
    contents = re.split("[A-Z]+", lines)
    for i in range(1, len(contents), 2):
        with open(contents[i] + '.txt', 'w') as file:
            file.write(contents[i+1])
    
    书的内容按章节标题分开。然后将生成的章节内容(
    contents[i+1]
    )写入章节文件(
    contents[i]+'.txt'

    编辑:这假定章节标题有固定的模式。

    您要求提供语法方面的帮助。 python的完整语法在这里

    在这里查看更多冗长的python文档@阅读复合语句(with、for和if),以便更准确地了解语法

    另外,请参阅以了解内置函数open()

    与代码块的缩进保持一致,并记住a
    在组曲前必须遵循每一句话

    import re
    
    with open('book.txt', 'r') as corpus:
        eye = corpus.readlines()
    
    verdad = False
    lambda l: re.match("^[A-Z]+$", l)
    
    for line in eye:
        if l(line):
            if verdad: verdad.close()
            verdad = open(line.replace(' ','_') + '.txt', 'w')
        elif ! l(line):
            if verdad: verdad.close()
        else:
            verdad.write(line + "\n")
    

    问题到底是什么?看起来你的方向是对的。基本上我在寻求语法方面的帮助。这个结构对我来说很有意义,但我正在努力处理我需要的文件/O@gweintraub嗯……你怎么知道这行是不是一个章节?你能从输入文件中发布一些文本吗?@KevinGuan My regex找到章节标题。它们的格式都是大写的,并且它们自己在一行上。这部分代码肯定能用。@gweintraub我刚刚添加了一些解释。也许你想看看:)我得到的是
    AttributeError:'bool'对象没有属性“write”
    ,我认为这很有意义。。是虫子吗?(当然是最后一行引起的错误…)