Объединить несколько текстовых файлов в один текстовый файл, используя python
Как мы можем сделать один текстовый файл, как показано ниже:
abc def ghi ABC DEF GHI adfafa ewrtwe rewrt wer wrwe
import csv import glob files = glob.glob('*.txt') for file in files: with open('result.txt', 'w') as result: result.write(str(file)+'\n')
Вы можете прочитать содержимое каждого файла непосредственно в методе записи дескриптора выходного файла следующим образом:
import glob read_files = glob.glob("*.txt") with open("result.txt", "wb") as outfile: for f in read_files: with open(f, "rb") as infile: outfile.write(infile.read())
Вы можете попробовать что-то вроде этого:
import glob files = glob.glob( '*.txt' ) with open( 'result.txt', 'w' ) as result: for file_ in files: for line in open( file_, 'r' ): result.write( line )
Должно быть прямо прочитано.
Модуль fileinput идеально подходит для этого варианта использования.
import fileinput import glob file_list = glob.glob("*.txt") with open('result.txt', 'w') as file: input_lines = fileinput.input(file_list) file.writelines(input_lines)
Также возможно объединить файлы, включив команды ОС. Пример:
import os import subprocess subprocess.call("cat *.csv > /path/outputs.csv")
filenames = ['resultsone.txt', 'resultstwo.txt'] with open('resultsthree', 'w') as outfile: for fname in filenames: with open(fname) as infile: for line in infile: outfile.write(line)
Объединение файлов с помощью Python
На первом шаге пройдемся по нашей папке (очень важно, чтобы все файлы, которые необходимо объединить, находились в одной папке) и запишем в список название файлов + путь. Это можно сделать с помощью 2 библиотек: os или glob.
import pandas as pd import os my_list=[] for root, dirs, files in os.walk('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx'): my_list.extend([os.path.join(root,file) for file in files if file.endswith('xlsx')]) print(my_list) ['ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file2.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file3.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file4.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file5.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file6.xlsx']
Важно! При указании пути до папки ставить «\\».
file.endswith(`***`) используется для поиска, в круглых скобках можно указать любое расширение xlsx, xls, csv и т.д.
import glob my_list=[] my_list.extend(glob.glob('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx') print(my_list) ['ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file2.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file3.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file4.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file5.xlsx', 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file6.xlsx']
И в первом и во втором варианте результат получился одинаковый — список my_list, содержащий полный путь до каждого файла и его название.
Создаем DataFrame, в который поочередно будем записывать всю информацию, содержащуюся в каждом файле.
Пробегаемся по списку my_list, читаем файл и записываем его в созданный DataFrame.
for file in my_list: df = pd.read_excel(file) result=result.append(df)
Если же ваши выгрузки содержат информацию, на нескольких листах, то добавляем еще один цикл.
for file in my_list: f = pd.ExcelFile(file) for sheet in f.sheet_names: df = pd.read_excel((file),sheet_name=sheet) result=result.append(df)
pd.ExcelFile(file) позволяет собрать информацию о листах.
Сохраняем получившийся DataFrame в excel или же csv.
result.to_excel('result.csv') result.to_csv('result.csv', sep = ';', encoding = 'cp1251')
import pandas as pd import os import glob #1 вариант my_list=[] for root, dirs, files in os.walk('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx'): my_list.extend([os.path.join(root,file) for file in files if file.endswith('xlsx')]) #2 вариант my_list=[] my_list.extend(glob.glob('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx') result=pd.DataFrame() for file in my_list: f = pd.ExcelFile(file) for sheet in f.sheet_names: df = pd.read_excel((file),sheet_name=sheet) result=result.append(df) result.to_excel('result.csv') result.to_csv('result.csv', sep = ';', encoding = 'cp1251')
А как вы объединяете файлы? Делитесь опытом в комментариях.
Применение Python для объединения файлов.
Не смотря на широко развивающуюся автоматизацию, еще приходится сталкиваться с отсутствием баз данных. Например, некоторые отчеты сохраняются в отдельных файлах Excel в разрезе каждого дня, причем в каждом файле содержатся множество листов с названиями городов. Естественно для анализа информации нам понадобится объединение информации в сводный отчет, причем с сохранением названий городов. Эту задачу помог нам решить Pandas совместно с библиотекой os, при условии одинаковой структуры отчетов и названия листов в файлах. Рассмотрим программу пошагово.
Импортируем необходимые библиотеки.
import pandas as pd from os import listdir import os
Создадим список, в котором перечислим все необходимые наименования листов,
и пустой объект Dataframe (далее – DF), который будет собирать в себе все отчеты, которые необходимо объединить.
Используя цикл «for» каждый Excel-файл в указанной директории (в нашем случае рабочая директория совпадает с директорией, в которой расположен скрипт) импортируется его при помощи метода «read_excel()» в объект DF. После чего, используя метод «append()», добавляем импортированный DF в DF, созданный в Шаге 2. По итогу мы получаем объект DF, содержащий в себе данные всех исходных файлов в директории.
for city in _list: print(city) fileList = listdir(os.getcwd()) for file in fileList: if file[0] != '~' and file[-4:] == 'xlsx': print(file) try: fileData = pd.read_excel( file, sheetname=city, ) fileData['city'] = city data = data.append(fileData, ignore_index=True) except: print('ERROR^', city, file)
Шаг 4. Используя метод «to_excel()» экспортируем данные из объединенного DF в файл Excel.
data.to_excel('result\\result.xlsx', index=False) print('end')
Склейка нескольких текстовых файлов в один
Совмещение нескольких текстовых файлов в один
Делаю программу на С++ под linux и не знаю как совместить несколько текстовых файлов в один, что бы.
Объединить содержимое нескольких текстовых файлов в один
Напишите командный файл, который позволяет объединить содержимое не- скольких текстовых файлов в.
Импорт нескольких текстовых файлов на один лист в Excel с возможностью задания маски
Здравствуйте! Нужна помощь по открытию нескольких текстовых файлов со строго определенным.
Склейка нескольких XML файлов
По заданию нужно склеить xml файлы в один. XmlDocument xmldoc = new XmlDocument();.
Сообщение было отмечено bobbibob как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12
import fileinput first = True with open("5.txt", "wt", encoding="cp1251") as out, fileinput.input( files=["<>.txt".format(i) for i in range(1, 5)]) as f: for line in f: if "next" in line: if not first: line = line.replace("next", "") else: first = False out.write(line)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
lstr = [] for path in ['1.txt', '2.txt', '3.txt', '4.txt' ]: with open(path) as f: lstr.append(f.read()) lstr.append('\n') #вроде это символ перевода строки, если нет то поправь for idx, s in enumerate(lstr): a = s.find('next') if a: lstr[idx] = s[:a] + s[(a+4):] break with open('5.txt', 'a') as f: for s in lstr: f.write(s)
pyuser, А не подскажите как указать что файлы 1-4.txt в кодеровке utf8 куда уже только не тыкал encode»utf8″ пишет invalid syntax
Добавлено через 5 минут
pyuser, А не подскажите как указать что файлы 1-4.txt в кодеровке utf8 куда уже только не тыкал encode»utf8″ пишет invalid syntax
Сообщение от bobbibob
Сообщение от alex925
Это он пишет конда я вставляю encode
а так он пишет
File «1.py», line 31, in
for line in f:
File «C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\fileinput.py
«, line 265, in __next__
line = self.readline()
File «C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\fileinput.py
«, line 370, in readline
self._buffer = self._file.readlines(self._bufsize)
File «C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\encodings\cp
1251.py», line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: ‘charmap’ codec can’t decode byte 0x98 in position 3084: cha
racter maps to
fileinput.input( files=["<>.txt".format(i) for i in range(1, 5)]), openhook=fileinput.hook_encoded("utf8"))
1 2 3 4 5 6 7 8 9 10 11 12 13
first = True with open('5.txt', 'wt', encoding='utf8') as out: all_data = ''.join( [open('<>.txt'.format(i), encoding='utf8').read() for i in range(1, 5)] ) for line in all_data.split('\n'): print(line) if 'next' in line: if not first: line = line.replace('next', '') else: first = False out.write(line + '\n')
Сообщение от alex925
PythonВыделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
first = True
with open(‘5.txt’, ‘wt’, encoding=’utf8′) as out:
* * all_data = ».join(
* * * * [open(‘<>.txt’.format(i), encoding=’utf8′).read() for i in range(1, 5)]
* * )
* * for line in all_data.split(‘\n’):
* * * * print(line)
* * * * if ‘next’ in line:
* * * * * * if not first:
* * * * * * * * line = line.replace(‘next’, »)
* * * * * * else:
* * * * * * * * first = False
* * * * out.write(line + ‘\n’)
Всё работает. Огромное Человеческое спасибо.
Добавлено через 31 минуту
а почему когда добавляю out.close() в конце, что бы добавить еще действие с конечным файлом он мне пишет
TabError: inconsistent use of tabs and spaces in indentation?
Добавлено через 11 минут
Разобрался!! Всем огромное спасибо за помощь!!
Добавлено через 1 час 51 минуту
А как удалить все файлы .txt в папке питоном?
Добавлено через 38 секунд
точнее те 4 которые были в 5 переработаны
import os os.remove(filename)
Сообщение от bobbibob
Сообщение от askurandrio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import os first = True with open('5.txt', 'wt', encoding='utf8') as out: * * all_data = ''.join( * * * * [open('<>.txt'.format(i), encoding='utf8').read() for i in range(1, 5)] * * ) * * for line in all_data.split('\n'): * * * * print(line) * * * * if 'next' in line: * * * * * * if not first: * * * * * * * * line = line.replace('next', '') * * * * * * else: * * * * * * * * first = False * * * * out.write(line + '\n') os.remove(1.txt)
Добавлено через 29 секунд
а можно сделать что бы он удалял все txt файлы, что бы не перечислять их?
Подскажите, плиз, вариант кода, когда в папке находятся файлы не с номерным именем, а с произвольным. Нужно считать имена файлов в папке и объеденить после этого их в один фаил. Заранее благодарен.
Добавлено через 16 часов 13 минут
Уже не надо. собрал сам из различных кусков кода нормального Франкенштейна.
Добрый день. Стоит задача создания небольшого пакета файлов, будем называть это "Архивом", где.
Обработка группы файлов и «склейка» файлов в один
Здравствуйте. Извините за глупый вопрос, но тем не менее: Подскажите, как лучше поступить.
Открытие нескольких текстовых файлов
Добрый день! У меня такая проблема: есть множество текстовых файлов, необходимо открыть все и.
Импорт нескольких текстовых файлов в excel
Здравствуйте. Нужна помощь с импортом нескольких текстовых файлов которые имеют вид: номер.
Загрузка нескольких текстовых файлов в поле Memo
Здравствуйте. Помогите пожалуйста разобраться, как открыть в Memo несколько текстовых файлов? Когда.
Вычисление количества символов в нескольких текстовых файлов
здрасте. нужно сделать так, чтобы при выборе нескольких текстовых файлов высчитовалось количество.
Загрузка нескольких текстовых файлов в базу данных
ПРОШУ ПОМОЧЬ USER`у. Тема такая: Постановка задачи: 1. по нажатию кнопки на форме ACCESS.