将多个变量写入文件

3
我希望使用Python将两个变量写入文件。 根据这篇文章所述,我编写了以下内容:
f.open('out','w')
f.write("%s %s\n" %str(int("0xFF",16)) %str(int("0xAA",16))

但是我收到了这个错误:
Traceback (most recent call last):
  File "process-python", line 8, in <module>
    o.write("%s %s\n" %str(int("0xFF", 16))  %str(int("0xAA", 16)))
TypeError: not enough arguments for format string

这个语法正确吗?我认为应该是 "%s %s\n" % (str(int("0xFF", 16)), str(int("0xAA", 16))) - user35288
你为什么要使用 str(int()) 呢?"%i %i\n" % (int("0xFF", 16), int("0xAA",16)) 同样可以工作,并且在我看来更清晰。此外,如果只有十六进制字符串保证以 0x 开头,那么可以使用 int(string, 0),因为它会自动正确转换带前缀的八进制字符串并正确处理十进制字符串。如果所有的字符串都是十六进制的,但可能没有前缀 0x,那么使用 int(string, 16) 可能是你需要的,不过这取决于具体情况。 - JAB
6个回答

13

您没有向%传递足够的值,您在格式字符串中有两个格式化符号,因此它期望长度为2的元组。请尝试以下内容:

f.write("%s %s\n" % (int("0xFF" ,16), int("0xAA", 16)))

@mahmood 是的,我有,你遇到了什么问题? - cmd
好的,谢谢。我在括号开闭方面遇到了问题,现在已经解决了。 - mahmood

3

更好的方法是这样使用 format

'{0} {1}\n'.format(int("0xFF",16), int("0xAA",16))

此外,没有必要使用strint包装起来。

是的,如果他使用的是Python2.7或更高版本,那么格式很好。 - cmd
format 在 2.6 版本中可用,但您必须显式地为替换字段编号(即 '{0} {1}\n'.format(...))。 - chepner

2
首先,您文件的打开方式是错误的,f.open('out', 'w') 应该改为:
f = open('out', 'w')

对于这样简单的格式,你可以在Python 2.x中使用print

print >> f, int('0xff', 16), int('0xaa', 16)

或者,对于Python 3.x:

print(int('0xff', 16), int('0xaa', 16), file=f)

否则,请使用.format
f.write('{} {}'.format(int('0xff', 16), int('0xaa', 16)))

2

% 操作符需要一个对象或元组。因此正确的写法是:

f.write("%s %s\n" % (int("0xFF", 16), int("0xAA",16)))

还有很多其他的方法可以格式化字符串,文档是你的朋友 http://docs.python.org/2/library/string.html


1
你需要提供一个元组:
f.open('out','w')
f.write("%d %d\n" % (int("0xFF",16), int("0xAA",16)))

-1

这句话最好写成:

f.write("255 170\n")

2
这些在示例中是常量。实际上它们是变量。 - mahmood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接