Python 将文本文件拆分为多个文本文件

Python 将文本文件拆分为多个文本文件,python,bash,awk,gawk,Python,Bash,Awk,Gawk,我尽了最大的努力去理解,但我一生都无法使所提议的呆呆或拆分解决方案在我的案例中起作用 我有一个由288个提案组成的大型文本文件,每个提案都有300到500个单词长,段落数量不一(因此没有一致的行数)。但是,每个提案的标题都有以下性质的标识符:--或--。没有结束标记——尽管我想我可以在将原始文件拆分为多个文件之前,通过对原始文件进行一些正则表达式搜索和替换来插入一个结束标记。我想要的是一个包含288个单独文本文件的集合,每个文件都由两个破折号之间的数字命名。如果这能让事情变得更容易的话,我可以很

我尽了最大的努力去理解,但我一生都无法使所提议的
呆呆
拆分
解决方案在我的案例中起作用

我有一个由288个提案组成的大型文本文件,每个提案都有300到500个单词长,段落数量不一(因此没有一致的行数)。但是,每个提案的标题都有以下性质的标识符:
--
--
。没有结束标记——尽管我想我可以在将原始文件拆分为多个文件之前,通过对原始文件进行一些正则表达式搜索和替换来插入一个结束标记。我想要的是一个包含288个单独文本文件的集合,每个文件都由两个破折号之间的数字命名。如果这能让事情变得更容易的话,我可以很容易地将文件分为以三个数字开头的提案和以四个数字开头的提案

简而言之,我想这样做:

#! /bin/env bash or python

Split all_proposals.txt into 121.txt, 122.txt, etc.

Where all_proposals.txt consists of:

  --121--

  One Line Title of Proposal

  Followed by several paragraphs each on a line of variable length.

  Another paragraph for effect.

  --122--

  More lines indeterminate in number.

每次看到带有标题的行时,只需设置输出文件的名称:

awk '/--[0-9]*--/ {split( $0, a, "--" ); output=a[2]".txt" }
    { print > output }' all_proposals.txt

请注意,这会将标题行打印到文件中。如果您不想这样做,请在标题的操作序列中添加一个
next
命令。

在python中,只需几行代码就可以解决这个问题。看看这些文件

这样做的目的是搜索您的标识符,在本例中,该标识符可能包含以下表达式

r'(--[0-9]*--)'
特别是,请看一下您可以使用perl:

#!/usr/bin/perl
open(FI,"file.txt");
read(FI,$_,10000000);
close(FI);
@arr = split('--###--');
$cnt=0;
for $c (@arr)
{
    open(FO,">$cnt.txt");
    print FO $c;
    close(FO);
    $cnt++;
}

看起来你的问题是,“请你为我写这段代码好吗?”这不是堆栈溢出的目的。您是否尝试了一些无效的方法?
/bin/env
不是标准位置。您想要
/usr/bin/env
@NedBatchelder:以前的尝试包括但不限于:
csplit abstracts.txt'/-[0-9][0-9][0-9]-/''{186}'
csplit-f abstracts.txt'/-[0-9][0-9]/''{186 code>,
awk'/-\d/{f=1;c++print>“session i.
abstracts.txt'/-[0-9][0-9][0-9]/'/'/'/'-[186 code]--\n'-vprefix=“file”{print>前缀“ab-”NR.tx t“}摘要\u no\u id.txt
。。。所以,是的,我尝试了很多不起作用的东西,其中不包括我尝试过的四个Python脚本和我尝试过的bash脚本。也不包括我向当地人寻求帮助。我承认我的脚本和命令行很弱。@williampersell。。。是的,谢谢。我只是假装散列在那里,所以我没有承认,我承认,注意。Perl的<代码>分裂< /代码>考虑“X”字符为文件中的数字的正则表达式替换吗?我用“太过滑行<代码> > -[-9] [09] [09] -<代码>,它工作了:我有一个满是小文本的目录。有两件事需要补充:第一,它们没有标题名,这不是交易的破坏者;第二,Perl仍然超出了我的范围。@user14664130——我希望,尽管问题已经结束,但让我最接近答案的复选标记仍然对您有意义。(很抱歉,很少有人觉得它有用。)我对regex模块有一个初步的了解,我以前遇到过
re.split
,因此我可以将文件作为一个大字符串读入,然后使用regex模式将其拆分。我还不擅长的是理解如何通过将每个新的小字符串写入单独的文件来引导脚本。这是我所见过的
awk
中最令人惊奇的一点。与我之前在
awk
上的尝试一样,输出是原始文件的副本,但只是用第一个头重新命名。我觉得我遗漏了一些重要的信息,这些信息会让问题变得显而易见。