从read_csv中提取文件名 - Python

时间:2018-05-14 19:38:52

标签: python string pandas

我有一个脚本,当前从.csv文件中读取原始数据,并对数据执行一些pandas数据分析。目前.csv文件是硬编码的,读入方式如下:

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

我想改变两件事:

  1. 我想把它变成一个循环,所以它循环遍历.csv文件的目录,并在脚本中的每一个下面执行pandas分析。

  2. 我想获取每个.csv文件并删除'.csv'并将其存储在另一个列表变量中,我们称之为'new_table_list'。

  3. 我认为我需要类似下面的东西,至少在第一点(尽管我知道这不完全正确)。我不知道如何解决第二点

    感谢任何帮助

    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)
    

6 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点

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以避免与文件和脚本的路径和位置相关的任何问题。

答案 1 :(得分:3)

您可以尝试这样的事情:

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"的文件名列表。 part和data.values()是一个列表,每个文件都有一个pandas数据帧。

答案 2 :(得分:2)

要获取目录中的列表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)

答案 3 :(得分:1)

你可以这样试试:

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]

答案 4 :(得分:1)

我开始使用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)

答案 5 :(得分:0)

您可以(在打开时)将文件名添加到Dataframe属性中,如下所示:

 ds.attrs['filename']='filename.csv'

您可以随后在数据框中查询名称

 ds.attrs['filename']
'filename.csv'