Извлеките последние строки из файлов CSV и поместите их в другой файл с именем файла в Python

1

У меня есть список CSV файлов в каталоге:

file1.csv
file2.csv
file3.csv

Пример содержимого файлов:

value1  value2  value3
377298  128203  383929
365173  289201  287392

Мне нужно выбрать каждую последнюю строку из каждого файла и поместить ее в другой CSV:

files   value1  value2  value3
file1   365173  289201  287392
file2   362829  273829  372910

Любая помощь будет действительно оценена!

Теги:
csv
python-3.6
append

2 ответа

1
Лучший ответ

Используйте модуль os для получения списка имен файлов, а затем напишите начальную строку заголовка в out .csv а затем для каждого файла в каталоге, напишите последнюю строку этого файла, связанного с именем этого файла, с символом табуляции, разделитель.

import os
dir_name = 'the_directory'
with open('the_csv.csv', 'w') as out_handler:
    out_handler.write('\t'.join(['files', 'value1', 'value2', 'value3'])+'\n')
    for file in os.listdir(dir_name):
        with open(os.path.join(dir_name, file)) as in_handler:
            out_handler.write(file[:file.index('.')] + '\t' + in_handler.readlines()[-1])

И полный тест:

$ more the_directory/*
::::::::::::::
the_directory/a.csv
::::::::::::::
value1  value2  value3
377298  128203  383929
365173  289201  287392
::::::::::::::
the_directory/b.csv
::::::::::::::
value1  value2  value3
377298  128203  383929
365987  289123  287456
$ python -q
>>> import os
>>> dir_name = 'the_directory'
>>> with open('the_csv.csv', 'w') as out_handler:
...     out_handler.write('\t'.join(['files', 'value1', 'value2', 'value3'])+'\n')
...     for file in os.listdir(dir_name):
...         with open(os.path.join(dir_name, file)) as in_handler:
...             out_handler.write(file + '\t' + in_handler.readlines()[-1])
... 
27
29
29
>>> 
$ cat the_csv.csv 
files   value1  value2  value3
b.csv   365987  289123  287456
a.csv   365173  289201  287392
  • 0
    Спасибо большое за вашу помощь! Я хочу, чтобы первый столбец был file1 , а не file1.csv .
  • 0
    Хорошо, я обновил верхний код, чтобы разделить точки в имени файла, чтобы удалить расширения .csv .
0

Используйте glob.iglob чтобы найти файлы, и pd.read_csv чтобы прочитать их.

Например,

 import glob
 import pandas as pd
 list_last_values=[]
 for csv in glob.iglob('Path\\*.csv'):
     data=pd.read_csv(csv)
     list_last_values.append(pd.DataFrame(data.loc[len(data)-1,:]).T)

 df_last_values=pd.concat(list_last_values)'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню