小编ryp*_*pel的帖子

Django ImportError

我用目录结构创建了自己的Django应用程序

/appname
    __init__.py
    models.py
    /submodule1
        __init__.py
        a.py
Run Code Online (Sandbox Code Playgroud)

在里面a.py我有以下导入

from ..models import Something
Run Code Online (Sandbox Code Playgroud)

如果我/appname在我的/djangoproject文件夹中,这可以正常工作,但是当我将应用程序安装到Python的站点包(setup.py我创建了它)时,所有地狱都会破坏并且a.py无法再导入Something,并出现以下错误:

ImportError: cannot import name Something
Run Code Online (Sandbox Code Playgroud)

这是setup.py:

from distutils.core import setup

setup(name='appname',
      version='0.1',
      packages=['appname', 'appname.contrib'],
)
Run Code Online (Sandbox Code Playgroud)

python django python-import importerror

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

LXML:无法导入etree

我去了这个页面并下载了tar文件: http://pypi.python.org/pypi/lxml/2.3.4#downloads

然后我将lxml文件夹复制到我的Python26/Lib文件夹中.现在,当我去解释器并键入from lxml import etree我得到错误:cannot import etree.有人知道出了什么问题吗?我正在运行Windows.

python lxml html-parsing python-import

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

os.system和子进程调用之间的区别

我创建了一个程序,在本地服务器中创建Web体系结构,然后加载必要的浏览器以在localhost上显示html和php页面.

os.system调用会杀死python进程,但不会杀死其他进程 - 例如,httpd.exemysqld.exe

subprocess调用会终止httpd.exemysqld.exe程序,但会继续运行python代码,并且在subprocess调用后不会执行任何代码.

在执行python代码之后,我将如何杀死或隐藏所有必要的进程?

这是我的代码.

os.makedirs(dr + x + '/admin' + '/css')
dobj = open(dr + x + '/admin' + '/css' + '/style.css', 'w')
dobj.close()
del dobj
os.makedirs(dr + x + '/admin' + '/js')
os.makedirs(dr + x + '/admin' + '/img')
################################################################################
## THE OS SYSTEM CALLS CLOSE THE APP BUT OPEN THE PROCESSES
## AND THE SUBPROCESS CALLS CLOSE BOTH PROCESSES AND LEAVES THE …
Run Code Online (Sandbox Code Playgroud)

python subprocess

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

加速扩展/折叠JTree的所有节点

我有一个大约有100000个或更多节点的JTree.现在我想扩展整棵树.为此,我使用我在这里找到的解决方案.

我的问题是扩展这么大的树需要60秒或更长时间,这不是很方便.有没有人有任何建议我如何加快扩张?

java performance expand jtree

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

Python和urllib

我正在尝试使用urllib 从ftp 人口普查站点下载zip文件("tl_2008_01001_edges.zip").当我得到它时,zip文件的形式是什么?如何保存?

我是Python的新手,并不了解urllib的工作原理.

这是我的尝试:

import urllib, sys

zip_file = urllib.urlretrieve("ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/Autauga_County/", "tl_2008_01001_edges.zip")
Run Code Online (Sandbox Code Playgroud)

如果我知道ftp文件夹(或本例中的县)的列表,我可以使用glob函数运行ftp 站点列表吗?

谢谢.

python urllib urllib2

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

换行子进程'stdout/stderr

我想捕获并显示我通过Python的子进程调用的进程的输出.

我以为我可以将我的文件类对象作为命名参数stdout和stderr传递

我可以看到它访问fileno属性 - 所以它正在对对象做一些事情.但是,write()永远不会调用该方法.我的方法是完全关闭还是我错过了什么?

class Process(object):
    class StreamWrapper(object):
        def __init__(self, stream):
            self._stream = stream
            self._buffer = []
        def _print(self, msg):
            print repr(self), msg
        def __getattr__(self, name):
            if not name in ['fileno']:
                self._print("# Redirecting: %s" % name)
            return getattr(self._stream, name)
        def write(self, data):
            print "###########"
            self._buffer.append(data)
            self._stream.write(data)
            self._stream.flush()
        def getBuffer(self):
            return self._buffer[:]
    def __init__(self, *args, **kwargs):
        print ">> Running `%s`" % " ".join(args[0])
        self._stdout = self.StreamWrapper(sys.stdout)
        self._stderr = self.StreamWrapper(sys.stderr)
        kwargs.setdefault('stdout', self._stdout)
        kwargs.setdefault('stderr', self._stderr)
        self._process = subprocess.Popen(*args, …
Run Code Online (Sandbox Code Playgroud)

python iostream subprocess stdout stderr

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

python argparse来处理任意数字选项(比如HEAD(1))

有没有办法欺骗argparse接受任意数字参数,如HEAD(1)

head -5 test.txt
Run Code Online (Sandbox Code Playgroud)

相当于

head -n 5 test.txt
Run Code Online (Sandbox Code Playgroud)

我目前的方法是使用parse_known_args()然后处理其余部分,但我希望有一些更优雅的东西.

python optional-parameters command-line-arguments argparse

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

Python:参数解析器,可以正确处理子命令的全局选项

argparse在处理接收全局选项的子命令时失败:

import argparse
p = argparse.ArgumentParser()
p.add_argument('--arg', action='store_true')
s = p.add_subparsers()
s.add_parser('test')
Run Code Online (Sandbox Code Playgroud)

会有p.parse_args('--arg test'.split())工作,
但失败了p.parse_args('test --arg'.split()).

有谁知道python参数解析器正确处理子命令的全局选项?

python parsing command-line-arguments argparse subcommand

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

有没有更好的方法来控制子进程的 PYTHONPATH?

我有一组必须动态修改 os.sys.path 的脚本。然后脚本启动一个子流程。理想情况下,子进程将与调用者具有相同的 os.sys.path。我想避免将它作为参数传递,因为这需要修改子流程脚本。

我有可以工作并满足我所有需求的代码。我想知道是否有更好的方法来做到这一点,以及这种方法是否存在任何缺陷。

主要流程

import os
import sys
import subprocess

#append a dir thats not on the sys path
sys.path.append('C:/pytest2/')

#convert the sys.path into env variable format
pypath = ''
for d in sys.path:
    pypath = pypath + d + ';'

#create a temp copy of the env variables
myenv = os.environ.copy()

#set PYTHONPATH to match this scripts sys.path
myenv['PYTHONPATH'] = pypath

#setup a python command to echo the sys.path
command = 'python C:/pytest/test_subprocess.py'

#launch the subprocess with …
Run Code Online (Sandbox Code Playgroud)

python subprocess pythonpath

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

使用LXML编写XML标头

我目前正在编写一个脚本,将一堆XML文件从各种编码转换为统一的UTF-8.

我首先尝试使用LXML确定编码:

def get_source_encoding(self):
    tree = etree.parse(self.inputfile)
    encoding = tree.docinfo.encoding
    self.inputfile.seek(0)
    return (encoding or '').lower()
Run Code Online (Sandbox Code Playgroud)

如果那是空白的,我尝试从chardet以下方面获取:

def guess_source_encoding(self):
    chunk = self.inputfile.read(1024 * 10)
    self.inputfile.seek(0)
    return chardet.detect(chunk).lower()
Run Code Online (Sandbox Code Playgroud)

然后我codecs用来转换文件的编码:

def convert_encoding(self, source_encoding, input_filename, output_filename):
    chunk_size = 16 * 1024

    with codecs.open(input_filename, "rb", source_encoding) as source:
        with codecs.open(output_filename, "wb", "utf-8") as destination:
            while True:
                chunk = source.read(chunk_size)

                if not chunk:
                    break;

                destination.write(chunk)
Run Code Online (Sandbox Code Playgroud)

最后,我正在尝试重写XML标头.如果最初是XML标头

<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)

要么

<?xml version="1.0" encoding="windows-1255"?>
Run Code Online (Sandbox Code Playgroud)

我想把它变成

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

我目前的代码似乎不起作用:

def edit_header(self, input_filename):
    output_filename = …
Run Code Online (Sandbox Code Playgroud)

python xml lxml elementtree

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