Объедините несколько текстовых файлов в один текстовый файл

#arrays #python-3.x #string #numpy #file

Вопрос:

Я хотел бы объединить несколько текстовых файлов только в один текстовый файл и прочитать все его содержимое. Однако коды считывают только один текстовый файл и сохраняют данные, взятые только из одного текстового файла. Коды;

 path = "/home/Documents/Python/"
     
read_files = glob.glob(path "*.txt")

with open("contents.txt", "wb") as outfile:
    for f in read_files:
        with open(f, "rb") as infile:
            outfile.write(infile.read())
 

Я также попробовал почти такой же другой код. Однако он не смог преобразовать строку в плавающую, потому что первые строки в текстовых файлах содержат символ#.

 x = np.array([float(raw) for raw in f.readlines()])
 

Я знаю, что в stackoverflow есть и некоторые другие вопросы, касающиеся того, как это сделать. Несмотря на то, что я тоже пробовал их, я не смог добиться этого должным образом.

Я буду признателен за любую помощь или предложение.

Комментарии:

1. Поскольку ваш вопрос также помечен numpy, вы можете использовать loadtxt numpy, который будет считывать данные в виде массива Numpy. loadtxt Функция поддерживает чтение / пропуск столбцов различных типов, а также заголовков. Затем вы можете объединить все свои массивы и сохранить их с numpy.savetxt помощью . В качестве альтернативы вы можете использовать библиотеку Pandas, которая имеет более приятный интерфейс для некоторых функций и представлений данных Numpy.

Ответ №1:

на случай, если кто-то захочет использовать другой метод, эти коды сработали для меня. я пошел по другому пути, чтобы найти решение своего собственного вопроса.

 all_files = glob.glob(path   "/*.txt")
all = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    all.append(df)
frame = pd.concat(all, axis=0, ignore_index=True)
 

Ответ №2:

Что-то вроде этого, возможно.

 import os
import glob
import pandas as pd
os.chdir("C:\")


extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]


#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "C:\combined_csv.csv", index=False, encoding='utf-8-sig')