Python:循环遍历目录并使用filename作为数据框名称保存每个文件

时间:2017-10-26 09:08:54

标签: python pandas loops assign

_name = 'hr.employee' _inherit = ['hr.employee','hr.employee.category'] 中有一个名为R的函数,它为环境中的名称赋值。

EG:

assign

在python中我似乎无法做同样的事情。我最初尝试过:

assign("Hello", 2)
> Hello
[1] 2

但我可以看到这是试图使一个字符串等于一个不起作用的文件。

我设法通过执行以下操作获取列表中的所有文件:

import numpy as np
import pandas as pd
import os

for file in os.listdir('C:\\Users\\Olivia\\Documents'):
    if file.endswith(".csv"):
        os.path.splitext(file)[0] = pd.read_csv('C:\\Users\\Olivia\\Documents\\' + file)

但是现在如何将每个数据框从列表中取出并命名为没有扩展名的文件。必须有一种方法将列表中的每个数据框指定为文件列表中的名称

1 个答案:

答案 0 :(得分:3)

老实说,你使用第一种方法走在正确的轨道上。不幸的是,python没有为您提供动态创建“可变数量的变量”的选项,正如您已经尝试并实现的那样。 然而的!你可以创建一个字典,并根据需要将数据帧分配给字符串键。这是怎么回事。

root = 'C:\\Users\\Olivia\\Documents'

ddict = {}
for file in os.listdir(root):
    if file.endswith(".csv"):
        name = os.path.splitext(file)[0]
        ddict[name] = pd.read_csv(os.path.join(root, file))

构建此词典的另一种方法是使用 dict comprehension

ddict = {os.path.splitext(file)[0] : pd.read_csv(os.path.join(root, file)) 
                for file in os.listdir(root) if file.endswith('csv')
}

现在,引用单个数据帧就像

一样简单
ddict['your_file_name']

另外需要注意的是,最安全的加入文件的方式是使用os.path.join。它比普通+更安全。

<强>参考