我正在尝试将一个非常大的文本文件拆分成多个较小的文本文件。当我运行下面的代码时,第一个创建的文件是正确的。之后的所有内容只包含'INSERT INTO ...'字符串,而不包含任何其他内容。提前致谢
import math
interval = 100000
with open('my-big-file','r') as c:
for i, l in enumerate(c):
pass
length = i + 1
numOfFiles = int(math.ceil(length / interval))
with open('my-big-file','r') as c:
for j in range(0, numOfFiles):
with open('my-smaller-file_{}.sql'.format(j),'w') as n:
print >> n, 'INSERT INTO codes (code, some-field, some-other-field) VALUES'
for i, line in enumerate(c):
if i >= j * interval and i < (j + 1) * interval:
line = line.rstrip()
if not line: continue
print >> n, '(%s,'something','something else'),' % (line)
else:
break
答案 0 :(得分:0)
在迭代文件之前,您不需要计算行数,只要达到给定行数,就可以直接写入新文件:
#!/usr/bin/env python
def split(fn, num=1000, suffix="_%03d"):
import os
full, ext = os.path.splitext(fn)
with open(fn, 'r') as f:
for i, l in enumerate(f):
if i%num == 0:
try:
out.close()
except UnboundLocalError:
pass
out = open(full+suffix%(i/num)+ext, 'w')
out.write(l)
else:
out.close()
if __name__ == '__main__':
import sys
split(sys.argv[1])
您可以从命令行运行此命令。虽然split
command可能更有用,但它支持多种选项。
还可以重写此代码,以便将with
用于正在写入的文件,但这是另一个主题。