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语句
。看见