我有一个包含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?
答案 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