【问题标题】:Python create a function to write an object to file quicklyPython创建一个函数来快速将对象写入文件
【发布时间】:2013-05-25 12:32:29
【问题描述】:

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

我正在处理数据数组,这是一种解决方法,可以帮助轻松可视化数组以帮助编辑它。

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

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

欢迎任何 cmets 或对其进行改进。

【问题讨论】:

  • 我真的不明白你想要做什么。简单的csvit(a) 不起作用吗?
  • 我已经编辑了语法错误..
  • 感谢@PeterVaro 感谢编辑
  • 嗨@poke。 csvit(a) 不起作用,因为 name 函数是一个填充符
  • 澄清一下,问题是如何写一个函数f使得f(a) == 'a'

标签: python function csv


【解决方案1】:

您似乎在询问调用范围内的对象名称。在 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?

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

输入你想要的名字就可以睡个好觉了。

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

【讨论】:

  • 感谢@PhilCooper 这非常有效。我不确定如何自动传递名称。你能详细说明一下吗?
  • 测试对象身份,使用is而不是==
【解决方案2】:

我认为您正在寻找 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'}

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

【讨论】:

  • 感谢@Blubber,你说得对,我不太清楚。 name(x) 不是一个工作函数,我不知道用什么来代替它。我真的在寻找fun(x) 产生["a"] 的函数
猜你喜欢
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2019-02-07
相关资源
最近更新 更多