在Python

时间:2018-06-17 02:10:47

标签: python python-3.x python-3.6

我有一堆浮点值,例如:

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

4 个答案:

答案 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")

请注意,我必须在最后添加\nprint函数将其end参数添加到其打印内容的末尾,默认为\nwrite方法没有。

为了向后兼容并且因为偶尔它们更方便,Python还有其他方法可以做同样的事情,包括显式string formatting

f.write("This is x1: {}\n".format(x1))

... printf-style formatting

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.111111112.22222222之外,它还会将1.1打印为1.10000000,将1.23456789012345打印为{{1} }}

相同的格式字符串适用于f字符串,1.23456789str.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 语句块,它将自动关闭。