编辑:基于Ulf Rompe的注释,重要的是你使用"1"代替"0",否则你将破坏sys.path.
我已经做了很长一段时间的python(超过一年),我总是很困惑,为什么人们建议你使用sys.path.append()而不是sys.path.insert().让我来证明一下.
假设我正在开发一个名为PyWorkbooks的模块(安装在我的计算机上),但我同时处理一个包含PyWorkbooks的不同模块(比方说PyJob).当我正在使用PyJob时,我发现PyWorkbooks中的错误正在纠正,所以我想导入一个开发版本.
有两种方法可以同时工作(例如,我可以将PyWorkbooks项目放在PyJob中),但有时我仍然需要使用路径.但是,我不能简单地对sys.path.append()PyWorkbooks所在的文件夹执行操作.为什么?因为python会首先找到我安装的PyWorkbooks!
这就是你必须做一个sys.path.insert(1,path_to_dev_pyworkbooks)的原因
综上所述:
sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
Run Code Online (Sandbox Code Playgroud)
要么:
sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
Run Code Online (Sandbox Code Playgroud)
这对我来说已经引起了一些困扰,如果我们(作为一个社区)开始推荐sys.path.insert(1, path),我真的很喜欢它,好像你是手动插入一条路径我认为可以说这是你想要的路径用!
或者我有什么不对劲?这个问题有时会困扰我,我希望它在公开场合!
我想要的是一个方便的GUI来检查对象.dir()函数有时候还不够!
我会输入view_object(模块)会发生什么,它会给我一个GUI窗口
特点: - 树视图表示,类似于文件查看器.这将让我看到所有类,我可以扩展/收缩这些视图.- 选择任何对象让我看到任何doc属性.
理想情况下,它也可以让我在一个对象(或其他命令)上单击并点击该对象,在IT模块中打开该对象的树视图!
这应该不难做到,所以我假设有人成功了,我只是有时间找到它!
我一直在网上试图找到一种方法让VIM完成类似于PyDev的代码完成.它似乎不可能!
- 我试图使用此链接建议的omnicompletion:http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/ .
- 我已经尝试了几个插件来缓解这个问题,但没有工作.
"omnicomplete"功能不是我想要的.它只需要处理您正在处理的文件中的所有单词,并使用它们来尝试完成我正在做的事情.例如,如果我写道:
import numpy
a_single_array = range(100)
np.a#[then I hit cntrl+n to code complete]
Run Code Online (Sandbox Code Playgroud)
它会吐出"a_single_array"作为可能的完成 - 但这是荒谬的!这不是"numpy.a ......"的有效完成.
这是什么问题?所有插件都要做的就是从你所在的文件夹中运行一个dir(你要找的工作),然后过滤输出!这不是那么难!(我想你也必须阅读你正在编辑的文件,并过滤掉那个以注意名称的变化......但这就是它!)
说到它会有多容易......如果没有任何已经制作的东西,我本想考虑自己编写脚本!关于如何做的任何指南?
所以我编写了一个类,它可以很容易地使用Python与Excel或Gnumeric进行交互,并且希望扩展该类以包含Open Office.如果我有能力执行以下操作,我可以在30分钟内完成此操作:
如果这些很慢/有办法做到以下几点,我还需要能够:
此外,创建和重命名工作表的能力也很棒.
如果有人之前已经开展过这项工作,这是一个呐喊.如果他们给我信息,我会在文件的顶部引用它们
我的项目可以在这里找到:https://sourceforge.net/projects/pyworkbooks/,我建议你看一下.
编辑:我最后回答了我的问题,以便我可以有一个工作日志模块.但是,我还有一个相关的问题.请参阅下面的答案.
我试图通过始终记录到我所在的任何操作系统的临时目录来实现日志记录.为此,我编写了以下函数.
import logging, tempfile, os, sys
def getlog(logname, filename = 'python.log', directory = None):
'''returns a logger with logname that will print to filename and directoryname.'''
if directory == None:
fd, fname = tempfile.mkstemp()
directory = os.path.dirname(fname)
fullpath = directory + '/' + filename
mylog = logging.getLogger(logname)
hdlr = logging.FileHandler(fullpath)
formatter = logging.Formatter('L:%(name)s M:%(module)s T:%(asctime)s > %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
mylog.addHandler(hdlr)
mylog.setLevel(logging.INFO)
mylog.info('NEW LOGGER STARTED')
return mylog
if __name__ == '__main__':
log = getlog('testing')
log.info('working?')
log.info('yes, seems to be working') …Run Code Online (Sandbox Code Playgroud) 我刚开始看正则表达式,它们非常酷.他们看起来也很烦人,如果我能避免它,我真的不想'学习'它们.
这就是为什么一个好的gui会很棒.我正在寻找直观的东西,你可以拖放'条件框',选择你想要他们选择的条件,获得你的条件反对的东西列表等等.这使得构建正则表达式变得容易.嘿
如果有人知道任何事情,请告诉我!
编辑:感谢所有回复.看了一下之后,我根据它们搜索了一些问题并找到了这个链接:https: //stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world
Quickrex似乎有很多我想要的东西(尽管不如一些),加上它集成到eclipse中,这是我目前使用的IDE.
而不是"=="?我知道"是"是什么,它正在比较变量的身份.但是你什么时候想做呢?它为我所做的一切都是造成问题的原因.使用它一段时间后(因为我觉得它使我的代码更具可读性),我不会对"是"宣战.
有没有人用它来做"=="不会做的事情?我不明白为什么他们没有'''与'=='相同的东西,就像他们制作'和'和'&&'一样.如果有人想要指针,他们只需说"id (x)== id(y)"我们不会有这种混乱.
它是我不理解的python中的"陷阱"之一,并且绊倒了很多新手.我认为它让人们吵架的原因是他们不明白为什么会进行身份比较.有什么意义(呃)?
编辑:谢谢你的答案.我认为新人应该带走的是"总是使用'==',除非你知道你在做什么"!
我有一个2D数组值和一个索引数组.我想使用索引数组从每行的索引中提取值.以下代码将成功执行此操作:
from pprint import pprint
import numpy as np
_2Darray = np.arange(100, dtype = np.float16)
_2Darray = _2Darray.reshape((10, 10))
array_indexes = [5,5,5,4,4,4,6,6,6,8]
index_values = []
for row, index in enumerate(array_indexes):
index_values.append(_2Darray[row, index])
pprint(_2Darray)
print index_values
Run Code Online (Sandbox Code Playgroud)
返回
array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],
[ 10., 11., 12., 13., 14., 15., 16., 17., 18., 19.],
[ 20., 21., 22., 23., 24., 25., 26., 27., 28., 29.],
[ 30., 31., 32., 33., 34., 35., 36., 37., 38., 39.], …Run Code Online (Sandbox Code Playgroud)