小编Lit*_*les的帖子

在Python中扁平化未知深度的词典(等)列表的列表(噩梦般的JSON结构)

我正在处理一个JSON结构,它以这样的结构输出给我:

[{u'item': u'something',
  u'data': {
            u'other': u'',
            u'else':
               [
                  {
                    u'more': u'even more',
                    u'argh':
                         {
                            ...etc..etc
Run Code Online (Sandbox Code Playgroud)

如您所见,这些是嵌套的dicts和列表.有很多关于递归地扁平这些的讨论,但是我还没有找到一个可以处理字典列表的字典,这些字典又可以包含列表字典,列表列表,字典字典等; 深度不详!在某些情况下,深度可能高达100左右.到目前为止我一直在尝试这个没有太多运气(python 2.7.2):

def flatten(structure):
    out = []
    for item in structure:
        if isinstance(item, (list, tuple)):
            out.extend(flatten(item))
        if isinstance(item, (dict)):
            for dictkey in item.keys():
                out.extend(flatten(item[dictkey]))
        else:
            out.append(item)
    return out
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

更新 这几乎是有效的:

def flatten(l):
    out = []
    if isinstance(l, (list, tuple)):
        for item in l:
            out.extend(flatten(item))
    elif isinstance(l, (dict)):
        for dictkey in l.keys():
            out.extend(flatten(l[dictkey]))
    elif isinstance(l, (str, int, unicode)):
        out.append(l)
    return out
Run Code Online (Sandbox Code Playgroud)

python recursion json dictionary list

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

在python中跨多个列表删除公共列表元素的最简洁方法

我有n个数字列表.我想确保每个列表包含该特定列表的唯一元素.即其余任何一个都没有"共享"重复.
这对于两个列表来说非常容易,但是对于n个列表来说有点棘手.

e.g.   
mylist = [
[1, 2, 3, 4],
[2, 5, 6, 7],
[4, 2, 8, 9]
]
Run Code Online (Sandbox Code Playgroud)

变为:

mylist = [
[1, 3],
[5, 6, 7],
[8, 9]
]
Run Code Online (Sandbox Code Playgroud)

python list set

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

Python文件写入内存使用情况

我有一些巨大的未排序 ID 文件,例如:

file1.txt
a1
a2
a3...etc

file2.txt
b1
a2
c1...etc
Run Code Online (Sandbox Code Playgroud)

我试图最终把它们放在一个单独的、排序的文件中。它们每个都有多个 GB,因此我无法将它们全部加载到内存中。

我当前的解决方案是根据每个 ID 的第一个字符遍历每个文件并将行保存到新文件。这将创建一个可能包含 26 个文件的目录,每个字母对应一个文件。然后,我可以稍后合并这些文件,因为每个字母的文件都可以加载到内存中。这假设 ID 的第一个字符按字母顺序均匀分布:

outputs = {}
for filename in listdir(directory):
    with open(filename) as f:
       for line in f:
           if line[0] not in outputs:
               outputs[line[0]] = open('sorted_' + line[0] + '.txt', 'w')
           outputs[line[0]].write(line)

_ = [v.close() for v in outputs.itervalues()]

(then sort individually and concat the newly categorized files)
Run Code Online (Sandbox Code Playgroud)

我的问题是:新的 26 个文件中有多少内容保存在内存中?它是立即写入文件,还是仅在关闭后才真正写入?

我注意到通常如果我cat在另一个终端窗口中创建文件,它实际上并不包含您想要写入的内容,直到.close()被调用。但是它们可以保存在一个临时文件中,我不确定。

这是否只是将所有内容都保存在内存中,因此效率极低?

python memory file-writing

6
推荐指数
0
解决办法
215
查看次数

使用directoryperdb的MongoDB的第二个硬盘驱动器

有没有人有使用经验directoryperdb?我找不到很多它的用法示例,并希望先通过一些知识渊博的人来运行我的思维过程:)

我有一个近TB的数据库,并希望在另一个硬盘上添加另一个.我不能搞砸它,因为重新整合我的数据需要几个小时.

我目前有:

  • --dbpath/home/mongo
  • 安装了一个新的漂亮的空硬盘 /hd/newhd

我的流程如下:

  1. 让我们调用现有的数据库old和新的数据库new.
  2. mkdir /home/mongo/old
  3. mv /home/mongo/* /home/mongo/old/
  4. 符号链接/home/mongo/new/hd/newhd/newmongodb
  5. vim /etc/mongod.conf 〜并设定 directoryperdb = true
  6. 重启mongod并开始将数据插入到一个名为的新数据库中 new

这看起来不错吗?它会自动识别新文件夹并继续正常吗?


EDIT1:根据这个:https://groups.google.com/forum/?fromgroups=#!topic/mongodb-commits/frAjIDG08Mcmongod.lock文件应该是/home/mongo.日志或_tmp目录怎么样?

symlink mongodb

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

创建本地自定义主机名而不是localhost?

目前,我的烧瓶应用程序在本地运行:

HTTP://本地主机:5000/some_page

如何为我的应用创建本地自定义位置,例如:

HTTP:// myappname/some_page

有点像本地域名.这有可能吗?任何指针都会很棒.

dns localhost flask

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

只返回xpath中的元素文本(python/lxml)

我有这样的XML结构:

mytree = """
<path>
    <to>
        <nodes>
            <info>1</info>
            <info>2</info>
            <info>3</info>
        </nodes>
    </to>
</path>
"""
Run Code Online (Sandbox Code Playgroud)

我目前正在使用python lxml中的xpath来获取节点:

>>> from lxml import etree   
>>> info = etree.XML(mytree)   
>>> print info.xpath("/path/to/nodes/info")
[<Element info at 0x15af620>, <Element info at 0x15af940>, <Element info at 0x15af850>]  
>>> for x in info.xpath("/path/to/nodes/info"):
            print x.text

1
2
3
Run Code Online (Sandbox Code Playgroud)

这是伟大的,但有没有抢到一个更清洁的方式只是内部的文本作为一个列表,而不是在事后写for循环?
就像是:

print info.xpath("/path/to/nodes/info/text")
Run Code Online (Sandbox Code Playgroud)

(但这不起作用)

python xml xpath lxml xml-parsing

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

为远程MongoVUE GUI访问设置CentOS防火墙

我正在尝试设置MongoVUE以连接到运行MongoDB的联网服务器.我可以很容易地通过Putty中的SSH或在Windows命令行中使用mongo ip:port连接到它.

但是,当通过MongoVUE的SSH隧道建立连接时,我收到错误:

Unable to connect to server 127.0.0.1:5252: No connection could be made because the target machine actively refused it 127.0.0.1:5252.
Run Code Online (Sandbox Code Playgroud)

所以我假设防火墙配置有问题.

但是,我的/ etc/sysconfig/iptables包含以下行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

还有什么可以让这个连接?

这是MongoVue SSH配置:

在此输入图像描述

ssh centos mongodb mongovue

3
推荐指数
1
解决办法
2474
查看次数

列表查找性能 - 返回列表的最后一个元素是否必须扫描整个列表?

假设我有一本字典:

myDict = {
    'title': 'a nice title',
    'nice_list': [1,2,3,4,5,6,6,7,...,99999],
    'nice_lists_last_item': 99999,
}
Run Code Online (Sandbox Code Playgroud)

nice_list如果项目大于最终项目,我只想附加一个项目.

什么是更快:

  1. 使用: if new_element > nice_list[-1]

要么

  1. 使用: if new_element > nice_lists_last_item

方法1是否必须扫描整个列表(和/或nice_list每次都将所有内容放入内存中)才能找到该项目?哪个更快?(记住我打算做几十亿次这些比较?)

方法2将最后一个元素存储为自己独特的dict条目,那么更快吗?

python list

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

SQLite到MySQL奇怪的错误#1064

我正在将SQLite数据库转换为MySQL,因此我可以将其导入PHPMyAdmin.这应该是直截了当的.我将它导出到转储,更改了自动增量并将所有双引号更改为反引号.这是生成的文件的开头看起来像:

DROP TABLE IF EXISTS `chars`;
CREATE TABLE chars(
                            charid INTEGER PRIMARY KEY AUTO_INCREMENT,
                            character TEXT
                    );
INSERT INTO `chars` VALUES(3,'a');
INSERT INTO `chars` VALUES(4,'b');
Run Code Online (Sandbox Code Playgroud)

...当尝试导入PHPMyAdmin时,它会抛出此错误.

Error
SQL query:

CREATE TABLE chars(

charid INTEGER PRIMARY KEY AUTO_INCREMENT ,
CHARACTER TEXT
);

MySQL said: 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'character TEXT
                    )' at line 3
Run Code Online (Sandbox Code Playgroud)

缩进线后面是否有太多空间?我将"format"选项保留为"SQL",将SQL兼容模式保留为NONE,并选中"不要将AUTO_INCREMENT用于零值".它将用于django网络应用程序.

mysql migration sqlite phpmyadmin mysql-error-1064

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

为什么这个Python RegEx管道没有选择两个unicode范围?

包含平假名和片假名unicode字符的示例字符串:

myString = u"Eliminate ???? non-alphabetic ???? characters"
Run Code Online (Sandbox Code Playgroud)

根据以下内容匹配两个范围的模式:http: //www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

myPattern = u"[\u3041-\u309f]*|[\u30a0-\u30ff]*"
Run Code Online (Sandbox Code Playgroud)

简单的Python正则表达式替换功能

import re
print re.sub(myPattern, "", myString)
Run Code Online (Sandbox Code Playgroud)

返回:

Eliminate  non-alphabetic ???? characters
Run Code Online (Sandbox Code Playgroud)

我可以让它工作的唯一方法是我分别使用两个范围,一个接一个.什么阻止此RegEx简单地选择| -pipe的两侧?

python regex unicode

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

Python使用三个unicode字符来表示亚洲的fullstop?这很奇怪?

python文件:

# -*- coding: utf-8 -*-

print u"?" 
print [u"?".encode('utf8')]
Run Code Online (Sandbox Code Playgroud)

生产:

?
['\xe3\x80\x82']
Run Code Online (Sandbox Code Playgroud)

为什么python使用3个字符来存储我的1个fullstop?这真的很奇怪,如果你单独打印每一个,它们也都是不同的.有任何想法吗?

python unicode utf-8

0
推荐指数
1
解决办法
219
查看次数

在Python中递归导航员工树

我最近提出了这个问题,但我不是很擅长编写递归函数.你会如何解决它?

您的公司结构如下:

#          employee: manager
company = {
           '17': '15', 
           '16': '15',
           '10': '5', 
           '15': '10',  
           '5': '4', 
           '4': 'NULL'
           }
Run Code Online (Sandbox Code Playgroud)

每个号码都是该人的身份.由于没有经理,第4人是CEO并且具有NULL值.你怎么能写一个reportsTo(eid, mid)返回的递归函数:

  • reportsTo('17', '4') - > True
  • reportsTo('15', '16') - > False

python recursion

0
推荐指数
1
解决办法
784
查看次数