сценарий для папки,содержащей несколько наборов данных, каждый набор данных в этой папке извлекает список имен полей и соответствующий набор данных

#python

Вопрос:

Это путь к папке, содержащей 6 csv-файлов

 path = r'/Users/username/Documents/Lab/Datasets/FDA_Dataset'
 

Затем все шесть файлов объединяются в FDA_dataset((dataset_melanoma, datset_prostate, dataset_ovarian, dataset_lung, dataset_colorectal, and dataset_breast)

 FDA_dataset = glob.glob(path   "/*.csv")
 

Я определил функцию для создания dataframe для каждого csv-файла (6 кадров данных) и возврата имен полей и соответствующего им набора данных.

Например, я хочу вернуться:

 field_1, dataset_melanoma
field_2, dataset_melanoma
field_3, dataset_melanoma
...
field_1, dataset_breast
field_2, dataset_breast
field_3, dataset_breast
 

Это моя функция:

 def parse_csv(filename):
        df = pd.read_csv(filename, index_col=None, header=0)
        for col in df.columns:
                print(col, 'n,', filename)
for x in FDA_dataset:
        print(parse_csv(x))
 

Это возвращает: поле, путь к файлу

Однако я хочу вернуть поле и имя файла (а не путь к файлу) как таковые:

 field#, dataset_cancer. 
 

Как я могу вызвать переменную 'filename' в определяющей функции в качестве имени файла (без расширения), а не пути к файлу?

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

1. Я не знаю, что ты хочешь сделать. Лучше покажите примерные данные и ожидаемый результат.

2. filename это строка, поэтому вы можете использовать строковые функции для ее редактирования, т. Е. split("/") , split(".") , replace(".csv". "") , filename[:-4] чтобы пропустить расширение. Вы также можете использовать модуль os.path типа os.path.basename(...) или os.path.split(...) или os.path.splitext(...)

Ответ №1:

Пути-это строка, поэтому вы можете использовать строковые функции для работы с этим: т. Е. path.split('.') , path.split('/') , path[:-4] , path.replace('.csv', '')

 path = r'/Users/username/Documents/Lab/Datasets/FDA_Dataset/dataset_cancer.csv'

print( path.split('.')[0].rsplit('/', 1)[1] )
 

Результат:

 dataset_cancer
 

Вы также можете использовать модуль os.path : т. е. os.path.basename(...) или os.path.split(...) или os.path.splitext(...)

 import os.path

print( os.path.splitext(os.path.split(path)[-1])[0] )

print( os.path.splitext(os.path.basename(path))[0] )

 

Результат:

 dataset_cancer
 

Вы также можете смешивать и то, и другое

 print( os.path.basename(path)[:-4] )

print( os.path.basename(path).split('.')[0] )

print( os.path.basename(path).replace('.csv', '') )