如何在一行中写入多个字符串?

时间:2012-01-01 00:54:01

标签: python string

我已经开始用LPTHW学习Python了,我已经练习了16:

http://learnpythonthehardway.org/book/ex16.html

感觉自己像个白痴,因为我无法弄清楚其中一个看似简单的“额外信用”作业需要以下内容:

target.write(line1)
target.write('\n')
target.write(line2)
target.write('\n') 
target.write(line3)
target.write('\n') 

要压缩到一行代码。我尝试了以下一些方法:

target.write(line1 \n, line2 \n, line3 \n)

或者:

target.write('line1 \n, line2 \n, line3 \n')

或者:

target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)

我无法让它在同一行中重写line1,line2和line3字符串。我已经尝试过各种其他组合,包括逗号,引号等。我不断出现各种错误,例如无效语法或我有太多的参数。

11 个答案:

答案 0 :(得分:45)

target.write(line1 \n, line2 \n, line3 \n)

'\ n'只在字符串文字中有意义。如果没有引号,则表示没有字符串文字。

target.write('line1 \n, line2 \n, line3 \n')

好的,现在一切都是字符串文字。但是你想要line1,line2,line3不是字符串文字。你需要那些作为python表达式来引用有问题的变量。基本上,你必须在字符串周围加上引号,这些字符串实际上是文本,如“\ n”而不是变量。如果你这样做,你可能会得到类似的东西:

target.write(line1 '\n' line2 '\n' line3 '\n')

什么是2 2?没什么。你必须指定python如何组合这两个部分。因此,您可以2 + 22 * 2,但2 2没有任何意义。在这种情况下,我们使用add来组合两个字符串

target.write(line + '\n' + line2 + '\n' + line3 + '\n')

继续前进,

target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)

再次\n只在字符串文字中有意义。用于生成字符串的%运算符将字符串作为其左侧。因此,您需要在字符串中包含所有格式详细信息。

target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)

但是产生3个字符串文字,你只想要一个。如果你这样做,写下抱怨,因为它排除了一个字符串,而不是3.所以你可能尝试了类似的东西:

target.write('%r \n%r \n%r \n') % (line1, line2, line3)

但是你想把line1,line2,line3写到文件中。在这种情况下,您在写入完成后尝试格式化。当python执行它时,它将首先运行target.write:

None % (line1, line2, line3)

哪个没什么用处。要解决此问题,我们需要将% ()放在.write()

target.write('%r\n%r\n%r\n' % (line1, line2, line3))

答案 1 :(得分:6)

你最后的尝试看起来很有希望。它应该看起来像:

"%s \n %s \n %s" % (line1, line2, line3)

这将运算符%应用于字符串(具有3个%s占位符)和要替换的值元组(此处为字符串)。结果是格式化的字符串。

所以你需要将它包装在得到结果的函数中:

target.write("%s \n %s \n %s" % (line1, line2, line3) )

答案 2 :(得分:4)

这是一种方式:

target.write(line1 + '\n' + line2 + '\n' + line3 + '\n')

以下不起作用的原因

target.write(line1 \n, line2 \n, line3 \n)

line1是变量(注意它没有被引用),但是'\n'是一个字符串文字(因为它在引号中)。添加运算符重载以使字符串连接(组合)它们。

这不起作用的原因:

target.write('line1 \n, line2 \n, line3 \n')

是因为line1是一个变量。当你把它放在引号中时,它不再被视为变量。

答案 3 :(得分:2)

以下线为我工作,

 target.write(line1 + line + line2 + line + line3 + line)

在此之前我添加了

 line = '\n'

我的代码如下:

 from sys import argv
 script, filename = argv
 print 'Appending process starts on: %r' % filename
 target = open(filename, 'a')
 print 'Enter the contents:\t'
 line1 = raw_input('Next:\t')
 line2 = raw_input('Next:\t')
 line3 = raw_input('Next:\t')
 line = '\n'
 target.write(line1 + line + line2 + line + line3 + line)
 print 'Thank you !'

答案 4 :(得分:1)

作者建议使用格式,字符串和转义符,因此以下工作。这实现了Python的f字符串:

target.write(f"{line1} \n{line2} \n{line3} \n")

答案 5 :(得分:0)

请勿尝试使其过于复杂。该字符串的功能与打印内容时的功能相同,只是您以target.write开头,因此可以将其写入文件中,而不必打印。

例如,如果要打印变量并将它们放在新行中,则可以使用此字符串

print(f“ {line1} \ n {line2} \ n {line3} \ n”)

在练习5中,您了解了要引入变量,您需要在给变量赋予的名称前加上{},如果要将变量引入字符串,则必须以f开头字符串 在练习9中,您学会了使用\ n(如果想在新行中添加内容)

现在您要写入文件而不是打印文件,因此该字符串是相同的,只是这次以target.write开头 target.write(f“ {line1} \ n {line2} \ n {line3} \ n”)

答案 6 :(得分:0)

不确定这是否是pythonic方式,但是无论如何它都能完成工作。

a = f"""
{line1}
{line2}
{line3}
"""
target.write(a)

答案 7 :(得分:0)

LPTHW:练习16,学习练习3

此文件中重复太多。

使用字符串,格式和转义符仅通过一个target.write()命令而不是六个命令即可打印出line1,line2和line3。

target.write#Study Drill 3的更强大实现

formatter = "{0}\n{1}\n{2}\n"
target.write(formatter.format(line1,line2,line3))

答案 8 :(得分:0)

此信息确实很有帮助。通过执行以下操作,我得到了正确的结果:

target.write(line1 + "\n" + line2 + "\n" + line3 + "\n")

串联的想法对我来说永远不会发生。

答案 9 :(得分:0)

target.write(第1行+''+第2行+''+第3行+'')

如果您希望将其放在同一行,则上面的命令将起作用,如果您希望其在单独的行中,请在新行上添加“ \ n”。

答案 10 :(得分:-1)

这对我有用。

target.write(“ line1 \ nline2 \ nline3 \ n”)

此外,Ewart提到了促使我点击的关键字,“'\ n'仅在字符串文字中有意义。”