У меня есть папка с текстовыми файлами 100k. Я хочу поместить файлы с более чем 20 строками в другую папку. Как мне сделать это в Python? Я использовал os.listdir, но, конечно, не хватает памяти даже для загрузки имен файлов в память. Есть ли способ получить, может быть, 100 имен файлов одновременно?
Вот мой код:
import os
import shutil
dir = '/somedir/'
def file_len(fname):
f = open(fname,'r')
for i, l in enumerate(f):
pass
f.close()
return i + 1
filenames = os.listdir(dir+'labels/')
i = 0
for filename in filenames:
flen = file_len(dir+'labels/'+filename)
print flen
if flen > 15:
i = i+1
shutil.copyfile(dir+'originals/'+filename[:-5], dir+'filteredOrigs/'+filename[:-5])
print i
И вывод:
Traceback (most recent call last):
File "filterimage.py", line 13, in <module>
filenames = os.listdir(dir+'labels/')
OSError: [Errno 12] Cannot allocate memory: '/somedir/'
Вот модифицированный скрипт:
import os
import shutil
import glob
topdir = '/somedir'
def filelen(fname, many):
f = open(fname,'r')
for i, l in enumerate(f):
if i > many:
f.close()
return True
f.close()
return False
path = os.path.join(topdir, 'labels', '*')
i=0
for filename in glob.iglob(path):
print filename
if filelen(filename,5):
i += 1
print i
работает с папкой с меньшим количеством файлов, но с папкой большего размера печатается только «0» ...
Работает на Linux-сервере, печатает 0 на Mac ... да ладно ...