Объединение нескольких файлов в один, модуль fileinput Python
Отбираем файлы по маске и объединяем их содержимое в один
В примере будем искать все файлы, расположенные в директории path , совпадающие с паттерном pattern и записывать данные из всех найденных файлов в новый общий файл new_file.all . В общий файл будем дописывать строку с именем файла перед его объединением.
Внимание! Будьте осторожны, если будете читать файлы и записывать новый файл c расширением .txt в одно и то же место (каталог или директорию) особенно с паттерном ‘*.txt’ . Это может привести к бесконечной рекурсии чтения и записи. Так как новый созданный файл с расширением .txt , в итоге, будет читать и писать сам себя!
Для этого в примере, новому общему файлу дано расширение .all , а не .txt . Вдруг кто-нибудь «скопипастит» и изменит каталог поиска файлов path на корневой, то рекурсии точно не избежать.
import fileinput, glob, os # каталог текстовых файлов # измените на свой path = '/path/to/txt/files' # паттерн поиска файлов по расширению pattern = '*.txt' glob_path = os.path.join(path, pattern) list_files = glob.glob(glob_path) # расширение нового файла установим как '.all' new_file = 'new_file.all' if list_files: # открываем список файлов 'list_files' на чтение # и новый общий файл 'new_file' на запись with fileinput.FileInput(files=list_files) as fr, open(new_file, 'w') as fw: # читаем данные построчно for line in fr: # определяем первую строку нового файла if fr.isfirstline(): # название читаемого файла file_name = fr.filename() # дописываем строку с названием файла fw.write(f'\n\n------------ file_name>\n\n') # если нужно, то здесь обрабатываем каждую строку 'line' # после обработки дописываем в общий файл fw.write(line)
Больше об управлении потоком чтения списка файлов читайте в разделе «Управление чтением списка файлов модуля fileinput».
То же самое можно сделать и без модуля fileinput , но будет работать чуть дольше по времени и потреблять больше ресурсов.
import glob, os # каталог текстовых файлов # измените на свой path = '/path/to/txt/files' # паттерн поиска файлов по расширению pattern = '*.txt' glob_path = os.path.join(path, pattern) list_files = glob.glob(glob_path) # расширение нового файла установим как '.all' new_file = 'new_file.all' # чтение и запись if list_files: for file_name in list_files: # открываем файл из 'list_files' на чтение # а новый общий файл 'new_file' на дозапись with open(file_name, 'r') as fr, open(new_file, 'a') as fw: # дописываем строку с названием файла fw.write(f'\n\n------------ file_name>\n\n') # читаем данные построчно for line in fr: # если нужно, то здесь обрабатываем каждую строку 'line' # после обработки дописываем в общий файл fw.write(line)
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция input() модуля fileinput
- Управление чтением списка файлов модуля fileinput
- Класс FileInput() модуля fileinput
- Хуки файлов модуля fileinput
- Объединение нескольких файлов в один, модуль fileinput Python
Как работать с несколькими файлами в python в одном?
Пишите это в начало файла где требуются эти переменные.
Импортируете таким способом все что вам нужно из одного файла в другой. Если у вас небольшой проект то не вижу смысла разделять маленький код на несколько файлов
Ответ написан 21 февр.
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
- +1 ещё
Как сделать форму с добавлением нескольких элементов на django?
- 1 подписчик
- 3 часа назад
- 22 просмотра
Запуск нескольких файлов Python
Возникла потребность запускать более трех файлов .py, но столкнулся с такой проблемой, которая в PyCharm перегружает полностью ПК. Однако, через сам IDE Python идет все ровно. Каким «методом» или способом можно одновременно (или последовательно) исполнить все файлы .py в определенной папке? P.S. Сами программы в папке зациклены и не выводят результаты.
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
задан 2 июн 2021 в 2:34
xxxHEKETOSxxx xxxHEKETOSxxx
79 1 1 серебряный знак 7 7 бронзовых знаков
план б. сделать 4й .ру в который импортировать все 3 и запустить отдельными потоками через threading
2 июн 2021 в 5:31
пробывал, немного не то что я хотел.
2 июн 2021 в 9:13
@xxxHEKETOSxxx а, что вы хотели? Почему не устраивает предложенный вариант в комментариях? Если есть какие-то ограничения, дайте нам знать дополнив вопрос
2 июн 2021 в 10:15
нехотелось бы использовать многопоточность. интересует способ открытия нескольких файлов Python одновременно, но не использовать сам Python.
2 июн 2021 в 13:03
бат файлы запускают последовательно. пока 1й не завершиться 2й не стартанёт. в вашем случае где »’Сами программы зациклены»’ запустится только 1й.
2 июн 2021 в 14:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
import subprocess files = ["foo.py", "bar.py", "foobar.py"] # файлы, которые нужно запустить for file in files: subprocess.Popen(args=["start", "python", file], shell=True, stdout=subprocess.PIPE)
Суть этого кода, что он посылает команды в терминал и запускает её. Для каждого файла открывается новый терминал. Этот код гарантированно работает на windows, на linux не проверял (там надо немного по-другому вроде как посылать аргументы, поправьте в комментариях если не прав).
Из недостатков такое решение проблематично дебажить (если это очень важно).
В зависимости от задачи можешь получать нужные файлы через модуль os и посылать дополнительные аргументы, дополнив список в аргументе args в subprocess.Popen, если в скрипте они вытаскиваются через sys.argv, argparse и прочие библиотеки для работы с CLI.
Работа с несколькими файлами сразу, лежащими в одной папке
Добрый день. У меня такой вопрос: мне предстоит работать сразу с большим количеством текстовых файлов, лежащих в одной папке. Для их открытия нужно каждый раз писать f = codecs.open(«название файла», «r», «utf8») или есть какой-либо другой способ получить данные сразу из всех файлов, лежащих в одной папке?
Заранее спасибо.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Возможна ли работа с одной базой данных сразу несколькими пользователями
Здраствуйте, ситуация такая: в офисе установлен 1С УТ, необходимо из дома одновременно получать.
Работа с файлами и каталогами. Удаление всех пустых строк у всех файлов лежащих в одной папке
В одной папке находится множество текстовых файлов *.txt Все файлы содержат некоторый текст Между.
Работа с несколькими файлами
Имеются два типизированных файла одинакового размера, элементами которых являются отдельные.
Работа с несколькими файлами
Помогите пожалуста исправить ошибки //main.cpp #include <iostream> #include <conio.h> #include.
Работа с несколькими файлами
Имеются два текстовых файла с одинаковым числом строк. Переписать с сохранением порядка следования.
Регистрация: 14.05.2014
Сообщений: 250
1 2 3 4 5
g = '' l = ['1','2','3'] #имена файлов for i in l: f = open(i,'r','utf8') g += f.readlines()
Добавлено через 10 минут
1 2 3 4 5 6 7 8
import os dir = '/dir/temdir/' # указываем нашу директорию g = '' l = os.listdir(dir) #l = ['1','2','3'] #имена файлов for i in l: f = open(i,'r','utf8') g += f.readlines()
вот так полнее
Регистрация: 25.05.2014
Сообщений: 12
огромное спасибо.
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
tutunak, а закрывать файлы будет вася пупкин?
1 2 3 4 5 6 7 8
import os dir_ = '/dir/temdir/' # указываем нашу директорию g = '' l = os.listdir(dir_) #l = ['1','2','3'] #имена файлов for i in l: with open(i, 'r', 'utf-8') as fd: g += fd.readlines()
Добавлено через 1 минуту
да и переопределять python объекты плохо. можете нарваться на необъяснимое поведение.
223 / 208 / 63
Регистрация: 26.05.2011
Сообщений: 363
1 2 3 4 5 6 7 8
import fileinput import os dir_ = "путь_к_папке_с_файлами" files = [os.path.join(dir_, name) for name in filter(os.path.isfile, os.listdir(dir))] fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8")) with fi(files=files) as fd: process(fd)
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
pyuser,
1 2 3 4 5
files = [os.path.join(dir_, name) for name in filter(os.path.isfile, os.listdir(dir))] # этот вариант не лучше? files = [os.path.join(dir_, name) for name in os.listdir(dir) if os.path.isfile(name)]
223 / 208 / 63
Регистрация: 26.05.2011
Сообщений: 363
ilnurgi, на вкус и цвет все карандаши разные :-). Букв столько же. Читабельность, ИМХО, одинакова
Сообщение от pyuser 
на вкус и цвет все карандаши разные
или цвет, некоторые на вкус одинковые
| Меню пользователя @ tutunak |
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
pyuser, а скорость сравните)
Вот скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
import os import time dir_ = os.path.dirname(__file__) start = time.time() files = [os.path.join(dir_, name) for name in filter(os.path.isfile, os.listdir(dir_))] finish = time.time() print "1", finish - start start = time.time() files = [os.path.join(dir_, name) for name in os.listdir(dir_) if os.path.isfile(name)] finish = time.time() print "2", finish - start
Вот директория( которая справо):
Вывод второй вариант пошустрее будет)
блин старался, фигнёй страдал, а никто не оценил:resent:
| Меню пользователя @ Wolkodav |
223 / 208 / 63
Регистрация: 26.05.2011
Сообщений: 363
Сообщение от Wolkodav 
а скорость сравните
Ни Ваш, ни мой варианты не корректны, если dir_ не совпадает с текущим каталогом 🙁
Правильнее будет так:
1 2 3 4 5 6 7 8 9 10 11 12
import os from functools import partial dir_ = r"c:\windows\system32" join = partial(os.path.join, dir_) start = time.time() files = tuple(filter(os.path.isfile, map(join, os.listdir(dir_)))) print(time.time() - start, len(files)) start = time.time() files = [name for name in map(join, os.listdir(dir_)) if os.path.isfile(name)] print(time.time() - start, len(files))
0.5220000743865967 2938 0.5209999084472656 2938
Ваш вариант на одну тысячную секунды быстрее, но значит ли это что он лучше?
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
pyuser, второй всеравно шустрее)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Работа с несколькими файлами .h
Здравствуйте. Возникает проблема при работе с несколькими файлами .h. Суть в том, что в двух файлах.

Работа с несколькими файлами
Помогите, пожалуйста, с написанием программы!:) В файле (файл прикреплен) хранится текст книги.
Работа с несколькими файлами
Здравствуйте, при взаимодействии сразу с несколькими файлами возникает ошибка. Как можно пофиксить.

Работа с несколькими файлами
Добрый день.Возник вопрос. Работаю с файлами txt,программа открывает один файл,при нажатии кнопки.
Работа с несколькими файлами
решить в консольном режиме: Имеется текстовый файл с несколькими строками. Создать текстовый файл.
