Python - 在原始文件超过N行后创建一个新文件

时间:2014-11-20 16:56:20

标签: python

我有一个包含50个文件的目录。每个文件大约有100K行。我正在解析文件并提取符合特定条件的行。新文件比第一个文件小得多,可能大约30K行。我想从输入文件读取并写入输出文件,直到输出文件达到100K行。之后,我将创建一个新的输出文件并继续写入它。像这样的东西

import os
path='/path/to/directory'
listing=os.listdir(path)
with open('outfile','w') as f2:
    for filename in listing:
        for line in filename:
            if condition met:
                f2.write(line)

从目录中读取所有文件并将所有内容写入outfile。现在,如何设置创建新outfile的条件,当outfile达到100K行时,让我们说outfile1?

2 个答案:

答案 0 :(得分:0)

一些伪代码,我认为它更容易摆脱文件上下文(它可以多次保存打开和关闭同一个文件):

count, sk, lines = 100000, 0, 0
f2 = open('outfile0', 'w')
for filename in listing:                
    for line in filename:
       if condition met:               
           if lines > count:                   
               f2.close()
               sk, lines = sk+1, 0
               f2 = open('outfile%s'%sk, 'w')
           f2.write(line) 
           lines += 1
 f2.close()

答案 1 :(得分:0)

要打开的目录作为第一个命令行参数传递。我使用random.randint()编写了一个人工条件来测试脚本并设置每行10行的限制:

import sys
import os
import random

assert os.path.isdir(sys.argv[1])
listing = os.listdir(sys.argv[1])

l_index, f_name, f_index, f_max = 0 , 1, 0, 10

f2 = open('outfile0','w')

for filename in listing:

    with open(sys.argv[1]+"/"+listing[l_index],'r') as f1:

        for line in f1:

            if ( f_index > f_max ):
                f2.close()
                f2 = open('outfile'+str(f_name),'w')
                f_index, f_name = 0, f_name + 1

            if random.randint(0,100)%100 > 50:
                f2.write(line)
                f_index += 1