写入文件,添加额外空间

Posted

技术标签:

【中文标题】写入文件,添加额外空间【英文标题】:Writing to a File, Adding an Additional Space 【发布时间】:2016-05-08 23:15:03 【问题描述】:

我正在创建一个生成俳句的马尔可夫文本生成器。 生成俳句本身的函数将使用 for 循环生成 100 句俳句。它们可能看起来像:

第 1 行 线2 第 3 行 第1行 线2 第 3 行 第1行 线2 第3行

当我尝试将这些行写入文件时,我想在每个俳句之间包含一个空格,所以它看起来像:

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]]

【问题讨论】:

完成后,如果你能给我发一个很好的俳句,我会很高兴:D 【参考方案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)

这将打印每个俳句中的每一行,并由一个换行符分隔。 str.join() 也用于在每个俳句之间添加新行。使用file.write(),如果需要,您需要添加新行,所以我使用了str.format()

最后,写入文件的行数将等于 haikuList 的长度乘以 3 加上 len(haikuList) - 1 用于每个俳句之间的新行,因此您不需要计数器.

另外一件事,你应该将俳句列表传递给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)

【讨论】:

嗨,也许我的问题措辞有点错误。这在将每个俳句放在单独的行上时效果很好。但是,我正在寻找每个俳句之间的空白行,并且俳句的每一行本身都在单独的行上。我正在编辑我的问题以使其更清楚! @natalien:您可以尝试根据您的需求变化调整答案。我已经更新了答案,即使用'\n'.join() 而不是' '.join() 并在俳句之间添加一个额外的新行。 是的,我只是对如何组织它感到困惑。谢谢!【参考方案2】:

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

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

【讨论】:

fp.write(' '.join(line))(他可以使用len(items),而不是每一项都加一)【参考方案3】:

假设您的俳句列表中的每个俳句都是liststrunicode,您可以更简洁地执行类似的操作。

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."

【讨论】:

感谢您的回答!我实际上对我的问题进行了一些编辑。意识到我以前不是很清楚!

以上是关于写入文件,添加额外空间的主要内容,如果未能解决你的问题,请参考以下文章

Python,写入 CSV 文件有额外的空白行

C++ 将字符串写入文件 = 额外字节

空间不足时将数据写入文件开头

开发可以读取文件和写入额外数据的打印机驱动程序

Python:将图像和数据帧写入同一个 excel 文件

Oracle 触发器将所有插入/更新写入文件