python按文件名遍历文件_Python:遍历目录并使用文件名作为数据帧名称保存每个文件...

In R there is a function called assign which assigns a value to a name in the environment.

EG:

assign("Hello", 2)

> Hello

[1] 2

In python I can't seem to do the same. I initially tried:

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)

But I can see this is trying to make a string equal to a file which doesn't work.

I managed to get all the files in a list by doing:

import glob

dl = glob.glob(r'C:\Users\Olivia\Documents\*.csv')

nl = []

for i in dl:

pl = i.split(os.sep)

name = pl[5][:-4]

nl.append(name)

ddict = {}

for k, v in zip(nl,dl):

ddict[k] = ddict.get(k,"") + v

dfl = []

for k, v in ddict.items():

dfl.append(read_csv(v))

But now how do I get each data frame out of the list and named as the file without the extension. There must be a way to assign each data frame in the list as a name from the file list

解决方案

Honestly, you were on the right track with your first method. Unfortunately, python doesn't give you the option to create a "variable number of variables" dynamically, as you have tried and realised already. However! You can create a dictionary and assign dataframes to string keys as you like. Here's how.

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))

Another way of building this dictionary is using a 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')

}

Now, referring to a single dataframe is as easy as

ddict['your_file_name']

Another thing to note, the safest way to join files is using os.path.join. It's just safer than a plain +.

References

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值