繁体   English   中英

使用双回车符将大文本文件分解为单独的文件

[英]Break a large text file into separate files using a double carriage return

我在Windows 7上使用Python 2.7。我有一个大的文本文件,我想分成几个较小的文件。 该文件的格式当前看起来像这样。

Double carriage return
Header line
Body (consisting of several lines)
Double carriage return
Header line
Body (consisting of several lines)

我想使用标题行作为文件名并将正文作为文件内容来创建单独的文本文件。 双回车符标识新文件的开始。

我已经搜索了Stack Overflow,但是没有找到我想要的东西。 我是Python的新手,因此不胜感激。

到目前为止,我的代码是。

fh = open(path/file.txt)
data = fh.read()
doc = re.split(r'[\r\n\r\n]',data)
for para in doc:
    header = re.search('^[1-9].+Chapter', para)
    filename = str(header) + ".txt"
    fwrite = open(filename,"w")
    fwrite.write(para)
    fwrite.close()

我想将第一行用作文本文件标题。

第一行无法正确打开文件,假定存在其他所有内容,这应该可以正常工作。 将文件保持在try Exception块中的最佳做法

fh = open('path/file.txt','r')
data = fh.read()
doc = re.split(r'[\r\n\r\n]',data)
for para in doc:
    header = re.search('^[1-9].+Chapter', para)
    filename = str(header) + ".txt"
    fwrite = open(filename,"w")
    fwrite.write(para)
    fwrite.close()

open参数是带引号的字符串。 您省略了引号。

您的代码将不必要地将整个文件拖入内存中-小文件显然不是问题,但不必要地限制了程序。 如果不需要一起分析这些行,则最好一次将一条读入内存,然后在再次写完后将其忘记。

您的代码将DOS回车硬编码,这不仅无味...

您的代码没有强制要求分隔符后的第一行必须包含章节标题。 如果这不是硬性要求,则替换代码将需要进行一些更改。 我认为最好是发出警报并中止,而不是将文件中恰好匹配的东西往下拉。 但是使用重构代码,后一种方法实际上甚至都不可行。

with open('path/file', 'Ur') as input:
    output = None
    for line in input:
        if output is None:
            if 'Chapter' in line and line[0:1].isdigit():
                output = open('.'.join(line.rstrip(), 'txt'), 'w')
            else:
                raise ValueError(
                    'First line in paragraph is not chapter header: '
                    '{}'.format(line.rstrip())
        elif line == '\n':
            output.close()
            output = None
            continue
        output.write(line)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM