我有一堆浮点值,例如:
x1 = 1.11111111
x2 = 2.22222222
我想将这些值写入文件:
f = open("a.dat", "w+")
f.write("This is x1: ",x1)
f.write("\n") #I want to separate the 2 lines
f.write("This is x2: ",x2)
此时我在第二行遇到错误:
write() takes exactly one argument (2 given)
如何写入文件,以便在打开文件时看到以下格式:
This is x1: 1,1111111
This is x2: 2,2222222
是的,该文件必须是***。dat
这不是.txt
答案 0 :(得分:5)
write
函数只需一个字符串。您试图像print
一样使用它,它可以使用任意数量的参数。
事实上,你可以使用print
。默认情况下,它的输出仅输出到程序的输出(stdout
),通过传递file
参数,您可以将其发送到文本文件:
print("This is x1: ", x1, file=f)
如果要使用write
,则需要将输出格式化为单个字符串。最简单的方法是使用f-strings:
f.write(f"This is x1: {x1}\n")
请注意,我必须在最后添加\n
。 print
函数将其end
参数添加到其打印内容的末尾,默认为\n
。 write
方法没有。
为了向后兼容并且因为偶尔它们更方便,Python还有其他方法可以做同样的事情,包括显式string formatting:
f.write("This is x1: {}\n".format(x1))
f.write("This is x1: %s\n" % (x1,))
... template strings:
f.write(string.Template("This is $x1\n").substitute(x1=x1))
...和字符串连接:
f.write("This is x1: " + str(x1) + "\n")
除了最后一个之外的所有内容都会自动将x1
转换为与str(x1)
相同的字符串,但也允许使用其他选项,例如:
f.write(f"This is {x1:.8f}\n")
这会将x1
转换为float
,然后以8位小数精度对其进行格式化。因此,除了以8位小数打印出1.11111111
和2.22222222
之外,它还会将1.1
打印为1.10000000
,将1.23456789012345
打印为{{1} }}
相同的格式字符串适用于f字符串,1.23456789
和str.format
函数:
format
...而另外两种方法有类似但不太强大的格式化语言:
print("This is x1: ", format(x1, '.8f'), file=f)
f.write("This is x1: {:.8f}\n".format(x1))
f.write("This is x1: " + format(x1, '.8f') + "\n")
答案 1 :(得分:3)
您写入文件的方式看起来像是给出两个写函数的参数。所以你只需传递一个参数。尝试将x1和x2转换为字符串,然后写入文件。
f.write("This is x1 " + str(x1))
f.write("This is x2 " + str(x2))
答案 2 :(得分:1)
f.write('This is x1: %f'%x1)
f.write('This is x2: %f'%x2)
答案 3 :(得分:1)
首先看看下面的代码示例。我已经使用重复运算符*
重复字符串2次,这可以用于在单个语句中生成多行字符串(如果你有一组变量,可以使用)。
x1 = 1.11111111
x2 = 2.22222222
lines = "This is x%s: %s\n"*2 % (1, x1, 2, x2)
print(lines)
»输出
This is x1: 1.11111111
This is x2: 2.22222222
最后,您可以使用以下3行代码来实现目标。
x1, x2 = 1.11111111, 2.22222222
with open("a.dat", "w+") as f:
f.write("This is x%s: %s\n"*2 % (1, x1, 2, x2));
不需要关闭文件。一旦程序控制来自 with 语句块,它将自动关闭。