我正在创建一个生成haikus的Markov文本生成器。 生成ha句本身的功能将使用for循环生成100 haikus。它们可能看起来像:
1行 2号线 3号线 一号线 2号线 3号线 一号线 2号线 line3中
当我尝试将这些行写入文件时,我希望在每个ha句之间包含一个空格,所以它看起来像:
line1
line2
line3
line1
line2
line3
line1
line2
line3
在写入文件时如何才能实现?
此外,有时它不会保留格式...... 有时,它写成line1line2line3
我如何构建循环?
我试过了:
def writeToFile():
with open("results.txt", "w") as fp:
count = 0
for haiku in haikuList:
for line in haiku:
for item in line:
fp.write(str(item))
count += 1
print "There are", count, "lines in your file."
haikuList看起来像:
[[line1,
line2,
line3],
[line1,
line2,
line3],
[line1,
line2,
line3],
[line1,
line2,
line3]]
答案 0 :(得分:1)
在fp.write("\n")
循环后放置for line
;这将在每个ha句的末尾添加一个空行。
如果您需要在每个项目后添加空格,则可以在fp.write(" ")
之后添加fp.write(str(item))
。
答案 1 :(得分:1)
假设你的ha句中的每个ha句都是list
str
或unicode
,你可以更简洁地做这样的事情。
def writeToFile():
with open("results.txt", "w") as fp:
count = 0
for haiku in haikuList:
fp.write(" ".join(haiku) + "\n"):
count += len(haiku)
print "There are", count, "lines in your file."
答案 2 :(得分:1)
像这样使用str.join()
:
def writeToFile():
with open("results.txt", "w") as fp:
fp.write('{}\n'.format('\n\n'.join(['\n'.join(haiku) for haiku in haikuList])))
print "There are {} lines in your file.".format(len(haikuList)*3 + len(haikuList)-1)
这将打印每个ha句的每一行,由一个新的行字符分隔。 str.join()
也用于在每个ha句之间添加新行。使用file.write()
,如果需要,您需要添加新行,因此我使用str.format()
来执行此操作。
最后,写入文件的行数与每个ha句之间新行的haikuList
乘以3加len(haikuList) - 1
的长度相同,因此您不需要这是一个反击。
另一件事,你应该将ha句列表传递给writeToFile()
函数,而不是访问函数外部的变量:
def writeToFile(haikuList):
with open("results.txt", "w") as fp:
fp.write('{}\n'.format('\n\n'.join(['\n'.join(haiku) for haiku in haikuList])))
print "There are {} lines in your file.".format(len(haikuList)*3 + len(haikuList)-1)
然后这样称呼:
writeToFile(haikuList)