Режим w+
для open
приводит к обрезанию файла, это является причиной потери строк, и там останется только последняя.Другая небольшая проблема может заключаться в том, что этот метод соединения пути и имени файла не является переносимым.Для этой цели вам необходимо использовать os.path.join
.
with open(os.path.join(os.getcwd(),"ally_"+i+".txt"), 'a') as f:
f.write("%s\n" % file1)
Другая проблема может быть на недельной производительности, которую вы можете иметь в случае большого количества каталогов и файлов.В своем коде вы запускаете имена файлов в каталоге для каждого расширения и открываете выходной файл снова и снова.Еще одной проблемой может быть проверка расширения.В большинстве случаев расширение можно определить, проверив окончание имени файла, но иногда оно может вводить в заблуждение.Например, '.doc'
является расширением, однако в имени файла 'Medoc'
окончание 'doc'
- это всего лишь 3 буквы в имени.Поэтому я приведу пример решения этих проблем:
import os
exts = ['ppt', 'pptx', 'doc', 'docx', 'txt', 'pdf', 'epub']
files = []
outfiles = {}
for root, dirnames, filenames in os.walk('.'):
for filename in filenames:
_, ext = os.path.splitext(filename)
ext = ext[1:] # we do not need "."
if ext in exts:
file1 = os.path.join(root, filename)
#print(i,file1)
if ext not in outfiles:
outfiles[ext] = open(os.path.join(os.getcwd(),"ally_"+ext+".txt"), 'a')
outfiles[ext].write("%s\n" % file1)
for ext,file in outfiles.iteritems():
file.close()