2

我有

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
     return ''.join(random.choice(chars) for x in range(size))
r = id_generator()
bat = open('MS-%s.bat',"w")%(r)

为什么这不起作用?

TypeError: unsupported operand type(s) for %: 'file' and 'str'
4

5 回答 5

3

虽然现有答案在技术上是正确的,但为什么不改用该tempfile模块。它已经正确处理了名称冲突等。

而且您可以定义dir,因此在某个目录中suffix创建文件就可以了。.bat

于 2013-10-17T08:44:27.710 回答
2

你可能是想说

bat = open('MS-%s.bat'%(r),"w")
于 2013-10-17T08:18:02.653 回答
2

有一个错误的地方,你应该这样写:

    bat = open('MS-%s.bat' % (r), "w")
于 2013-10-17T08:18:06.760 回答
2

最后一行应该是:

bat = open('MS-%s.bat' % r ,"w")

因为r的替换属于MS-%s.bat。

于 2013-10-17T08:19:28.480 回答
2

我建议您使用.format函数而不是%运算符。取自文档:

这种字符串格式化方法是 Python 3 中的新标准,应该优先于新代码中字符串格式化操作中描述的 % 格式化。

所以你可以修改你的代码:

bat = open('MS-{0}.bat'.format(r),"w")
于 2013-10-17T08:20:50.793 回答