相关疑难解决方法(0)

如何使用JSON模块进行漂亮打印时实现自定义缩进?

所以我使用的是Python 2.7,使用该json模块对以下数据结构进行编码:

'layer1': {
    'layer2': {
        'layer3_1': [ long_list_of_stuff ],
        'layer3_2': 'string'
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我使用漂亮的打印方式打印出来,如下所示:

json.dumps(data_structure, indent=2)
Run Code Online (Sandbox Code Playgroud)

哪个好,除了我要缩进所有内容,除了内容"layer3_1"- 这是一个列出坐标的大量字典,因此,在每个上面设置一个值使得漂亮的打印创建一个包含数千行的文件,示例如下:

{
  "layer1": {
    "layer2": {
      "layer3_1": [
        {
          "x": 1,
          "y": 7
        },
        {
          "x": 0,
          "y": 4
        },
        {
          "x": 5,
          "y": 3
        },
        {
          "x": 6,
          "y": 9
        }
      ],
      "layer3_2": "string"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我真正想要的是类似于以下内容:

{
  "layer1": {
    "layer2": {
      "layer3_1": [{"x":1,"y":7},{"x":0,"y":4},{"x":5,"y":3},{"x":6,"y":9}],
      "layer3_2": "string"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我听说可以扩展json模块:是否可以将其设置为仅在"layer3_1"对象内部时关闭缩进?如果是这样,有人请告诉我怎么样?

python json indentation

31
推荐指数
4
解决办法
2万
查看次数

Python - 解决内存泄漏问题

我有一个Python程序,它运行一系列实验,没有数据打算从一个测试存储到另一个测试.我的代码包含一个我完全无法找到的内存泄漏(我看看内存泄漏的其他线程).由于时间限制,我不得不放弃寻找泄漏,但如果我能够隔离每个实验,程序可能会运行足够长的时间来产生我需要的结果.

  • 在单独的线程中运行每个测试有帮助吗?
  • 有没有其他方法来隔离泄漏的影响?

具体情况详情

  • 我的代码有两部分:实验运行器和实际的实验代码.
  • 尽管在运行所有实验的代码和每个实验使用的代码之间没有共享全局变量,但是必须共享某些类/函数.
  • 实验运行器不仅仅是一个简单的for循环,可以很容易地放入shell脚本中.它首先决定在给定配置参数的情况下需要运行的测试,然后运行测试然后以特定方式输出数据.
  • 我试图手动调用垃圾收集器,以防问题只是垃圾收集没有运行,但这不起作用

更新

Gnibbler的答案实际上让我发现我的ClosenessCalculation对象存储了每次计算中使用的所有数据都没有被删除.然后我用它来手动删除一些似乎已修复内存问题的链接.

python memory-leaks

30
推荐指数
1
解决办法
2万
查看次数

Python:支持索引的内存对象数据库?

我正在做一些数据修改,如果我可以在内存数据库中粘贴一堆字典,然后对它进行简单的查询,那将会更加简单.

例如,类似于:

people = db([
    {"name": "Joe", "age": 16},
    {"name": "Jane", "favourite_color": "red"},
])
over_16 = db.filter(age__gt=16)
with_favorite_colors = db.filter(favorite_color__exists=True)
Run Code Online (Sandbox Code Playgroud)

但有三个混淆因素:

  • 一些值将是Python对象,并且序列化它们是不可能的(太慢,破坏身份).当然,我可以解决这个问题(例如,将所有项目存储在一个大的列表中,然后在列表中序列化它们的索引......但这可能需要花费一些时间).
  • 将有数千个数据,我将针对它们运行查找繁重的操作(如图遍历),因此必须能够执行高效(即索引)查询.
  • 如在示例中,数据是非结构化的,因此要求我预定义模式的系统将是棘手的.

那么,这样的事情存在吗?或者我需要一起解决问题吗?

python database data-munging

26
推荐指数
3
解决办法
2万
查看次数

是否有可能取消引用变量id?

你可以取消引用从idPython函数中检索的变量id 吗?例如:

dereference(id(a)) == a
Run Code Online (Sandbox Code Playgroud)

我想从学术角度来了解; 我知道有更实用的方法.

python memory dereference

14
推荐指数
4
解决办法
1万
查看次数

PYTHON使每个进程都可以访问全局变量

我是python的新手,并开始使用遗传算法(GA)进行某种曲线拟合.对于那个GA,我使用(真棒)pyevolve库(http://pyevolve.sourceforge.net/),它能够通过使用多处理极大地减少计算时间.

这就是我的问题出现的地方:我想要近似的曲线是一个从excel文件中读取并在程序开头存储为全局变量的数组.使用python多处理模块时,每个进程都使用自己的全局变量创建自己的python实例.这导致每一个人,在每一代算法(意味着每个过程)中一次又一次地打开和读取excel文件.打开大的excel文件会导致大量的时间,因此只需打开一次该文件并使读取数组可供每个进程/个人使用,这将是一件好事.

多处理是在pyevolve库中启动的,我不想更改它以便于更新.不幸的是,这意味着只需通过例如将变量传递给流程池

p = Process(target=my_func,args=(my_array))

对我来说不是一个选择.这是我到目前为止找到的唯一解决方案.

有没有人知道从每个进程访问my_array的另一种方法?

提前致谢!

python global multiprocessing pyevolve

8
推荐指数
1
解决办法
842
查看次数

获取指向列表元素的指针

我想知道是否有可能获得python列表中元素的"指针".这样,我就可以直接访问我的元素,而无需知道我的元素的索引.我的意思是,在列表中,您可以在任何地方添加元素; 在开始,中间或甚至结束时,各个元素不会从其实际存储位置移动.从理论上讲,应该可以这样做:

myList = [1]

[1]

element = &myList[0]

element会在这里充当指针.

myList.insert(0, 0)
myList.append(2)
Run Code Online (Sandbox Code Playgroud)

[0,1,2]

此时,即使列表中的索引已更改,我仍然可以直接访问该元素.

我想这样做的原因是因为在我的程序中,跟踪我添加到列表中的每个项目都太繁琐了.每个项目都由一个对象生成.偶尔,对象必须更新值,但不能保证它将在与添加时相同的索引处找到它的项.有一个指针可以解决问题.我希望这是有道理的.

在Python中做这样的事情的正确方法是什么?

python pointers list

7
推荐指数
1
解决办法
2万
查看次数

如何通过id访问变量?

可能重复:
通过id()获取对象?

>>> var = 'I need to be accessed by id!'
>>> address = id(var)
>>> print(address)
33003240
Run Code Online (Sandbox Code Playgroud)

有没有办法使用的地址var在内存中,所提供的id(),用于访问的价值var

UPD:
我还想说,如果这不能在标准Python中完成,那么它也会很有趣,如果这可以通过黑客攻击C++内部的Python来实现.

UPD2: 知道如何改变价值也会很有趣var.

python pointers reference pass-by-reference pass-by-value

6
推荐指数
1
解决办法
8970
查看次数

Python反函数的id(...)内置函数

id内置函数是反向还是反向?我正在考虑使用它来编码和解码字符串,而不需要花费太多时间或像PyCrypto库那样有很多开销.对我的需求非常简单,所以我不想PyCrypto用于简单的编码和解码.

就像是:

>>> id("foobar")
4330174256
>>> reverse_id(4330174256) # some function like this to reverse.
"foobar"
Run Code Online (Sandbox Code Playgroud)

python uuid built-in

6
推荐指数
1
解决办法
2415
查看次数

泡菜和复制持久对象的类?

我正在尝试为一个只读对象编写一个类,该类不会真正与copy模块一起复制,并且当它被腌制以在进程之间传输时,每个进程都将维护不超过一个副本,无论如何很多时候它会作为“新”对象传递。已经有这样的东西了吗?

python persistence pickle

5
推荐指数
1
解决办法
3347
查看次数

在Python中,'<function at ...>'是什么意思?

什么<function at 'somewhere'>意思?例:

>>> def main():
...     pass
...
>>> main
<function main at 0x7f95cf42f320>
Run Code Online (Sandbox Code Playgroud)

也许有办法以某种方式使用它0x7f95cf42f320

python function repr memory-address

5
推荐指数
1
解决办法
8549
查看次数

有没有办法让dis.dis()递归打印代码对象?

我一直在使用该dis模块来观察CPython字节码。但是最近,我注意到的某些不便行为dis.dis()

以这个例子为例:我首先定义一个函数,multiplier其中包含嵌套函数inner

>>> def multiplier(n):
    def inner(multiplicand):
        return multiplicand * n
    return inner

>>> 
Run Code Online (Sandbox Code Playgroud)

然后dis.dis(),我用它来拆卸它:

>>> from dis import dis
>>> dis(multiplier)
  2           0 LOAD_CLOSURE             0 (n)
              3 BUILD_TUPLE              1
              6 LOAD_CONST               1 (<code object inner at 0x7ff6a31d84b0, file "<pyshell#12>", line 2>)
              9 LOAD_CONST               2 ('multiplier.<locals>.inner')
             12 MAKE_CLOSURE             0
             15 STORE_FAST               1 (inner)

  4          18 LOAD_FAST                1 (inner)
             21 RETURN_VALUE
>>>
Run Code Online (Sandbox Code Playgroud)

如您所见,它反汇编了顶级代码对象。但是,它并没有拆卸inner。它只是表明它创建了一个名为的代码对象,inner并显示了代码对象的默认值(无信息)__repr__()

有没有办法让我dis.dis() …

python recursion disassembly

5
推荐指数
1
解决办法
521
查看次数

在Python中,如何确定对象是否仍然存在?

如何确定先前在我的Python程序中创建的对象是否仍然存在?通过存在,我的意思是,仍然可以通过我仍然持有参考的其他对象到达.

背景:

我正在尝试使用可能有问题的解析器.解析器返回一个具有递归引用的成员的对象.使用我在网上找到的任何调试转储命令都无法对对象进行pickle或dump.当我逐步完成解析器时,我可以看到一个我以后需要访问的对象.但它看起来好像对象最终没有在解析器返回的对象中实际引用.我想确定我看到在调试器中创建的对象是否在解析器返回的对象中的某个位置可用.

python garbage-collection

4
推荐指数
2
解决办法
2128
查看次数