-1

嗨,我正在尝试编写一个小辅助函数,以将对象以自己的名称保存到 csv 中。

我正在使用数据数组,这旨在成为一种解决方法,以帮助轻松可视化数组以帮助编辑它。

我面临的挑战是我不清楚如何让函数通过x变量查看a下面 MWE 中的名称。我想做的就是将它保存为a.csv. getattr()不起作用,所以我很难过。

import random
import csv

def csvit(x):
    f=open(name(x)+'.csv','wb'):
    writer = csv.writer(f,quotechar='"', quoting=csv.QUOTE_ALL)
    [writer.writerow(i) for i in x]
    f.close()


a = []
for i in range(10):
    t = [random.randint(0,1000) for r in range(10)]
    a.append(t)

name(x) 不是一个工作函数,我不知道用什么代替它。我真的在寻找一个fun(x)产生的功能["a"]

为了完整起见,似乎在@PhilCooper 的答案后面起作用的代码是

import csv

def csvit(x):
    tmp = next(key for key,val in globals().items() if val == x and not key.startswith('_'))
    f=open('/home/me/Desktop/csvs/'+tmp+'.csv','wb')
    writer = csv.writer(f,quotechar='"', quoting=csv.QUOTE_ALL,dialect=csv.excel)
    [writer.writerow(i) for i in x]
    f.close()

欢迎对此提出任何意见或改进。

4

2 回答 2

2

看起来您正在询问调用范围内的对象名称。在 python 中,对象的名称不是对象的一部分,它是当前范围内的键(即在 locals() 或 globals() 中)

你能找到吗。是的,但它可以在该范围内有多个名称:

next(key for key,val in globals().items() if val is x and not key.startswith('_'))

b = a
#do you want b or a as the name now?

这只是假设全球范围。更丑的是你真的必须检查帧堆栈然后.....啊啊啊啊

只需传入你想要的名字,然后安然入睡。

如果你想做一些花哨的事情,那么创建一个类或命名元组,但保持很简单。

于 2013-05-25T12:51:54.097 回答
1

我认为您正在寻找dict或 dir(obj),但不确定。

>>> class Foo (object):
...     def __init__ (self):
...             self.bar = 'foobar'
... 
>>> foo = Foo()
>>> dir(foo)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar']
>>> foo.__dict__
{'bar': 'foobar'}

但由于你的问题相当稀疏,我不确定。

于 2013-05-25T12:36:16.280 回答