записывать имена файлов разных расширений в разные текстовые файлы - PullRequest
1 голос
/ 16 марта 2019
import os

exts = ['ppt', 'pptx', 'doc', 'docx', 'txt', 'pdf', 'epub']
files = []

for root, dirnames, filenames in os.walk('.'):
    for i in exts:
        for file in filenames:
            if file.endswith(i):
                file1 = os.path.join(root, file)
                print(file1)
                with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
                    f.write("%s\n" % file1)

Я пытаюсь этот код.Как мне записать все файлы в моей системе с помощью ex.Расширение документа в файл с именем all_docs.txt на моем рабочем столе?file.write () внутри цикла for записывает в файлы только последнюю строку каждого расширения.

Ответы [ 3 ]

0 голосов
/ 16 марта 2019
with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
    f.write("%s\n" % file1)

Согласно https://docs.python.org/2/library/functions.html#open операция "w +" обрезает файл.

Режимы 'r +', 'w +' и 'a +' открывают файл для обновления (чтение и запись); обратите внимание, что 'w +' усекает файл .

0 голосов
/ 16 марта 2019

Режим 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()
0 голосов
/ 16 марта 2019

Вам необходимо открыть файл журнала в режиме добавления (a), а не в режиме записи (w), поскольку при w файл усекается (все содержимое удаляется), прежде чем в него записывается что-то новое. .

Вы можете просмотреть документы open(). Этот ответ также содержит обзор всех файловых режимов.

Работает ли у вас с a?

...