我有几个脚本将目录名作为输入,我的程序在这些目录中创建文件.有时我想获取给程序的目录的基本名称,并使用它在目录中创建各种文件.例如,
# directory name given by user via command-line
output_dir = "..." # obtained by OptParser, for example
my_filename = output_dir + '/' + os.path.basename(output_dir) + '.my_program_output'
# write stuff to my_filename
Run Code Online (Sandbox Code Playgroud)
问题是如果用户给出带有斜杠的目录名,那么os.path.basename将返回空字符串,这不是我想要的.在python中处理这些斜杠/尾部斜杠问题的最优雅方法是什么?我知道我可以手动检查output_dir末尾的斜杠并删除它,如果它在那里,但似乎应该有更好的方法.在那儿?
此外,手动添加"/"字符是否可以?例如output_dir +'/'os.path.basename()还是有更通用的方法来构建路径?
谢谢.
我试图使用unittest在Python中进行一个简单的测试,看看如果一个类在构造函数中获得不合适的输入时是否抛出异常.这个类看起来像这样:
class SummaryFormula:
def __init__( self, summaryFormula):
self.atoms = {}
for atom in re.finditer( "([A-Z][a-z]{0,2})(\d*)", summaryFormula):
symbol = atom.group(1)
count = atom.group(2)
if pocet != "":
self.atoms[ symbol] = int(count)
else:
self.atoms[ symbol] = 1
Run Code Online (Sandbox Code Playgroud)
我的测试如下:
class ConstructorTestCase(unittest.TestCase):
def testEmptyString(self):
self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我想要的只是测试失败,这意味着不处理构造函数的不合适输入的异常.
相反,我得到一个错误:__init__() takes exactly 2 arguments (1 given).
我错过了什么?我应该指定的第二个参数是什么?
另外,我应该使用什么类型的错误来处理异常,即我的regexp无法匹配的输入被传递给构造函数?
托马斯,谢谢你
我有两个项目,my-lib和my-webapp.第一个项目是依赖my-webapp.因此,当要求Maven2构建我的WAR时,my-libJAR将添加WEB-INF/lib/到Web应用程序的目录中.
但是,我希望将my-libJAR直接解压缩到WEB-INF/classes目录中,就像my-lib源代码包含在项目中一样my-webapp.
换句话说,而不是具有以下WAR内容:
my-webapp/
...
WEB-INF/
lib/
my-lib-1.0.jar
... (others third libraries)
Run Code Online (Sandbox Code Playgroud)
我想拥有:
my-webapp/
...
WEB-INF/
classes/
my-lib files
lib/
... (others third libraries)
Run Code Online (Sandbox Code Playgroud)
有没有办法配置my-webapp或Maven2战争插件来实现这一目标?
我是python的初学者.我想在python中创建新的List对象.
我的代码:
recordList=[]
mappedDictionay={}
sectionGroupName= None
for record in recordCols:
item = record
print item
if not sectionGroupName == record[0]:
sectionGroupName = record[0]
del recordList[0:] # Here I want to create new list object for recordList
recordList.append(item)
mappedDictionay[sectionGroupName] = recordList
else:
recordList.append(tempItem)
Run Code Online (Sandbox Code Playgroud) 我有一个带有函数的Python模块:
== bar.py ==
def foo(): pass
== EOF ==
Run Code Online (Sandbox Code Playgroud)
然后我将它导入全局命名空间,如下所示:
from bar import *
Run Code Online (Sandbox Code Playgroud)
所以现在foo我可以使用该功能.如果我打印它:
print foo
Run Code Online (Sandbox Code Playgroud)
口译员高兴地告诉我:
<function foo at 0xb7eef10c>
Run Code Online (Sandbox Code Playgroud)
有没有办法让我发现这个功能foo来自模块bar?
我在我们的svn存储库中使用git-svn.然而,回购是巨大的,所以我首先检查项目,如下:
git svn clone svn://svn.server.com/project -s -r 12000:HEAD
Run Code Online (Sandbox Code Playgroud)
所以,现在我只修改了当前版本的12000.我想查看一些更多的修订,但以下什么都不做:
git svn fetch -r 11000:HEAD
Run Code Online (Sandbox Code Playgroud)
有没有办法获取较旧的版本?
我有一个unicode字符串,我需要返回前N个字符.我这样做:
result = unistring[:5]
Run Code Online (Sandbox Code Playgroud)
但当然是unicode字符串的长度!=字符长度.有任何想法吗?唯一的解决方案是使用re?
编辑:更多信息
unistring = "?????????" #Metallica written in Greek letters
result = unistring[:1]
Run Code Online (Sandbox Code Playgroud)
返回 - >?
我认为unicode字符串是两个字节(char),这就是为什么会发生这种情况.如果我做:
result = unistring[:2]
Run Code Online (Sandbox Code Playgroud)
我明白了
M
哪个是正确的,那么,我应该总是切片*2还是应该转换成什么?
class attrdict(dict):
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
self.__dict__ = self
a = attrdict(x=1, y=2)
print a.x, a.y
b = attrdict()
b.x, b.y = 1, 2
print b.x, b.y
Run Code Online (Sandbox Code Playgroud)
有人可以用文字解释前四行吗?我读到了类和方法.但这里看起来很混乱.
是否有任何api/lib for python会让我得到一个单词的同义词?
例如,如果我有"房子"这个词,它将返回"建筑物,住所,大厦等......"
假设我在Python中有2个列表,我想并行遍历每个列表 - 例如对两个列表执行元素1的操作,对两个列表执行元素2的操作...我知道我可以通过使用指数:
for listIndex in range(len(list1)):
doSomething(list1[listIndex])
doSomething(list2[listIndex])
Run Code Online (Sandbox Code Playgroud)
但是有没有办法通过foreach循环更直观地做到这一点?有点像for list1Value in list1, list2Value in list2......?
我目前在Python中遇到过这种情况,但这是一个长期存在的问题,我很想知道你是否能用任何语言做到这一点.(我只是假设Python最有可能有一个方法来解决这个问题.)