У меня есть список 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
Любая помощь будет действительно оценена!
Используйте модуль 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
Используйте 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)'
file1
, а неfile1.csv
..csv
.