写入文件,添加额外空间

时间:2016-05-08 23:15:04

标签: python list file iteration markov-chains

我正在创建一个生成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]]

3 个答案:

答案 0 :(得分:1)

fp.write("\n")循环后放置for line;这将在每个ha句的末尾添加一个空行。

如果您需要在每个项目后添加空格,则可以在fp.write(" ")之后添加fp.write(str(item))

答案 1 :(得分:1)

假设你的ha句中的每个ha句都是list strunicode,你可以更简洁地做这样的事情。

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()来执行此操作。

最后,写入文件的行数与每个h​​a句之间新行的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)