Python:将文件分为两部分

Python:将文件分为两部分,python,file-io,Python,File Io,我目前有一个脚本,它将一个文件分解为多个输出文件,每个文件有两行 example, original file: AAA BBB CCC DDD EEE 输出文件为: output1.txt and output2.txt etc. AAA CCC BBB DDD 我想知道如何让代码一次创建两个输出文件,一个像它一样接收两行,另一个在文件中包含所有其他内容,例如 output1.txt rest1

我目前有一个脚本,它将一个文件分解为多个输出文件,每个文件有两行

example, original file:
AAA
BBB
CCC
DDD
EEE
输出文件为:

output1.txt      and output2.txt   etc.
AAA                   CCC
BBB                   DDD
我想知道如何让代码一次创建两个输出文件,一个像它一样接收两行,另一个在文件中包含所有其他内容,例如

output1.txt      rest1.txt     output2.txt    rest2.txt
AAA               CCC            CCC           AAA
BBB               DDD            DDD           BBB
                  EEE                          EEE
这是我到目前为止的代码,它执行第一个示例:

splitLen = 2         #  lines per file
outputBase = 'output' # output.1.txt, output.2.txt, etc.

input = open('file.txt', 'r')

count = 0
at = 0
dest = None
for line in input:
    if count % splitLen == 0:
      if dest: dest.close()
      dest = open(outputBase + str(at) + '.txt', 'w')
      at += 1
    dest.write(line)
    count += 1

谢谢大家!

我的结构如下:

with open(infile) as f:
    num_lines = sum(1 for line in f)

pairs = ((i,i+1) for i in range(0,num_lines-1,2))

for i,pair in enumerate(pairs):
     with open('output{}'.format(i),'w') as op, \
          open('rest{}'.format(i),'w') as rest, \
          open(infile) as f:        
         for j, line in enumerate(f):
             if j in pair:
                 op.write(line)
             else:
                 rest.write(line)

首先,找出输入文件中有多少行。接下来,编写一个生成函数,生成对应于“输出”文件中所需行的对(即(0,1)然后(2,3)然后…)。从这里开始就非常简单。

只要文件不是太大而无法放入内存,就可以将输入文件转换为列表,然后使用切片操作来构建输出文件

(编辑)以更改显示值

splitLen = 2         #  lines per file
outputBase = 'output%d.txt' # output.1.txt, output.2.txt, etc.
restBase = 'rest%d.txt'

with open('file.txt', 'r') as fp:
    input_list = fp.readlines()
    # to skip empties: input_list = [l for l in fp if l.strip()]

for i in range(0, len(input_list), splitLen):
    iteration = (i/splitLen)
    print 'iter', iteration
    with open(outputBase % iteration, 'w') as fp:
        fp.write(''.join(input_list[i:i+splitLen]))
    with open(restBase % iteration, 'w') as fp:
        fp.write(''.join(input_list[:i]))
        fp.write(''.join(input_list[i+splitLen:]))

我试着运行这个程序,但它没有创建output0.txt,output1.txt,递增1,而是0,2,4,最后两个文件不正确(rest4.txt是空的,output4.txt是output0.txt的重复)-你有什么想法?除此之外,它的其余部分都可以工作。我不确定您想要如何使用索引-我已经更改了代码,将文件输出为1、2等。。。至于最后的文件,可能是结尾有一些空行。我提供了一个消除所有空行的示例。谢谢,我肯定也最欣赏你的解决方案。在我的python版本2.6中,as op或as rest后面的逗号被视为语法错误(例如:line op,)-我不认为它缺少库。什么是使代码仍然工作的好方法?2.6很古老,你应该真正升级你的python安装。@user3295674:添加到你的代码顶部,
from\uuuuuu future\uuuu.import with\u语句
。看见