您好我正在尝试编写一个小辅助函数,以便以自己的名义将对象保存到csv。
我正在处理数据数组,这是一种解决方法,可以帮助您轻松地可视化数组,以帮助编辑它。
我面临的挑战是,我不清楚如何让函数通过x
变量查看下面MWE中a
的名称。我希望能够做的是将其保存为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)
名称(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()
欢迎任何评论或改进。
答案 0 :(得分: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?
这只是假设全球范围。更丑的是,你真的必须检查帧堆栈,然后..... ahhhhh
只需传递你想要的名字,然后安然入睡。
如果你想做一些奇特的事情,那么创建一个类或命名元组,但保持简单。
答案 1 :(得分: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'}
但由于你的问题相当稀疏,我不确定。