1
typetraits 2021-04-02 10:49:57 +08:00
文件名存进 dict,然后访问 dict 里这些 key,这种思路怎么样
|
2
typetraits 2021-04-02 10:53:58 +08:00
局部变量可以通过 locals()访问,实际也是个 dict,我觉得你这个需求可以直接通过把 pandas DataFrame 放进 dict 解决
|
3
minami 2021-04-02 10:54:58 +08:00
用 exec 函数执行赋值语句
|
4
aijam 2021-04-02 10:59:19 +08:00
globals()[item[:-4]] = pd.read_csv(item)
|
5
badacook OP @typetraits 为啥 还要转一步 ,能不能就在这个 for 内部 if 语句中完成啊,还要创建字典 再历遍字典啊
|
6
badacook OP @minami exec 函数执行赋值语句,exec "item[:-4]=pd.read_csv(item,encoding='gbk')" ,其中 item 如何解析为变量啊
|
7
badacook OP @minami
exstr = "'{0}'[:-4] = pd.read_csv({0},encoding='gbk')".format(item) exec exstr 按照 你说的 生成每个条目 的命令字符串,使用 exec 函数,无法执行 是否 exec 不支持变量字符串 |
8
minami 2021-04-02 15:40:01 +08:00
|
10
badacook OP @pursuer 那个赋值 加载 csv 在 for 的 if 分支下,而且 想做到变量名与加载的 csv 文件同名,其实作用域是想做到 for 的外层使用,只是想着看看 在 for 的 if 分支 赋值加载时 可以动态,不知道能否实现
|
11
pursuer 2021-04-03 09:53:11 +08:00 via Android
4#提供的那个 globals()[item[:-4]] = pd.read_csv(item)应该就可以了吧,如果你想做成一个独立的模块,然后修改调用者的作用域,那样的话需要将 global 传递过去,或者试着从调用栈找到调用者的模块,修改 sys.modules 。但后面这个我觉得不太好,可能意外的覆盖变量
|
12
badacook OP @pursuer 你如果有空 能不能试一试,就是一个目录下有几个 csv 文件,还可能有其他类型文件,要做的就是使用 pandas 库,将这些 csv 文件 以文件名变量的形式读进去,变量作用域在整个脚本范围,其中 globals()不是返回的全局字典嘛,作为 python 新手的我 实在有些不理解,其中 exec 函数 提供字符串命令的执行,感觉跟这个需求也有点儿接近,能不能试一试 也是个简单的小实验 我也想通过这个小实验 理解这个过程,谢谢了
|
13
badacook OP @aijam 非常感谢 globals() 与 vars() 均能实现 setting a string as a variable name,或者说 create variable variables in Python
|