Извлечь имя файла из read_csv - Python - PullRequest
0 голосов
/ 14 мая 2018

У меня есть скрипт, который в настоящее время читает необработанные данные из файла .csv и выполняет анализ данных pandas по этим данным. В настоящее время файл .csv жестко запрограммирован и читается так:

data = pd.read_csv('test.csv',sep="|", names=col)

Я хочу изменить 2 вещи:

  1. Я хочу превратить это в цикл, чтобы он просматривал каталог файлов .csv и выполнял анализ панд под каждым из них в сценарии.

  2. Я хочу взять каждый файл .csv, удалить «.csv» и сохранить его в другой переменной списка, назовем его «new_table_list».

Я думаю, что мне нужно что-то вроде ниже, по крайней мере, для 1-го пункта (хотя я знаю, что это не совсем правильно). Я не уверен, как обратиться ко 2-му пункту

Любая помощь приветствуется

import os 

path = '\test\test\csvfiles'
table_list = []

for filename in os.listdir(path):
    if filename.endswith('.csv'):
        table_list.append(file)
data = pd.read_csv(table_list,sep="|", names=col)

Ответы [ 5 ]

0 голосов
/ 14 мая 2018

Я бы начал с использования pathlib

from pathlib import Path

А затем использовать атрибут stem и метод glob.

Давайте сделаем функцию импорта

def read_csv(f):
    return pd.read_csv(table_list, sep="|")

Самый общий подход - хранить в словаре

p = Path('\test\test\csvfiles')
dod = {f.stem: read_csv(f) for f in p.glob('*.cvs')}

И вы также можете использовать pd.concat, чтобы превратить это в фрейм данных

df = pd.concat(dod)
0 голосов
/ 14 мая 2018

вы можете попробовать так:

import os
path = 'your path'
all_csv_files = [f for f in os.listdir(path) if f.endswith('.csv')]
for f in all_csv_files:
    data = pd.read_csv(os.path.join(path, f), sep="|", names=col)

# list without .csv
files = [f[:-4] for f all_csv_files]
0 голосов
/ 14 мая 2018

Вы можете попробовать что-то вроде этого:

import glob

data = {}
for filename in glob.glob('/path/to/csvfiles/*.csv'):
    data[filename[:-4]] = pd.read_csv(filename, sep="|", names=col)

Тогда data.keys() - это список имен файлов без части ".csv", а data.values() - это список с одним фреймом данных pandas для каждого файла.

0 голосов
/ 14 мая 2018

для получения списка CSV-файлов в каталоге используйте glob это проще, чем os

from glob import glob 

# csvs will contain all CSV files names ends with .csv in a list
csvs = glob('you\\dir\\to\\csvs_folder\\*.csv')

# remove the trailing .csv from CSV files names
new_table_list = [csv[:-3] for csv in csvs]

# read csvs as dataframes
dfs = [pd.read_csv(csv, sep="|", names=col) for csv in csvs]

#concatenate all dataframes into a single dataframe
df = pd.concat(dfs, ignore_index=True)
0 голосов
/ 14 мая 2018

Много способов сделать это

for filename in os.listdir(path):
    if filename.endswith('.csv'):
        table_list.append(pd.read_csv(filename,sep="|"))
        new_table_list.append(filename.split(".")[0])

Еще один

for filename in os.listdir(path):
    if filename.endswith('.csv'):
        table_list.append(pd.read_csv(filename,sep="|"))
        new_table_list.append(filename[:-4])

и многие другие

Как указывал @barmar, лучше также добавить путь кtable_list, чтобы избежать любых проблем, связанных с путем и расположением файлов и скриптов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...