如何在Python中每次写入新行?

3

我只是想将新推文追加到文件的新行中... 到目前为止,我在OS X Python上尝试的一切都不起作用。

  class CustomStreamListener(tweepy.StreamListener):
      def on_status(self, status):
          print status.text

          with open("myNewFile", "a") as file:
          file.write('\n')
          file.write("\n" + status.text + "\n")
          file.write('\n')

有什么想法吗?

实际上会发生什么? - user2357112
这是文件中的内容.../n#LOQOOTV 通过使用标签向公共电视发送内容,是否可以使用Chromecast?/n#LOQOOTV 保密/n#LOQOOTV 测试/n#LOQOOTV 测试/n#LOQOOTV 公共电视网络! - sirvon
你的实际代码中有斜杠,不是吗。 - user2357112
是的,我正在逐字使用下面的代码示例。 - sirvon
4个回答

6

您遇到了缩进问题:

  with open("myNewFile", "a") as file:
  file.write('\n')
  file.write("\n" + status.text + "\n")
  file.write('\n')

如果您想在with上下文中,应将以下三行向右缩进。

此外,您可以使用format()来准备要写的字符串,以提高效率和可读性:

  import os
  with open("myNewFile", "a") as file:
      file.write('{0}{0} {1} {0}{0}'.format(os.linesep, status.text)
      #file.write('\n')
      #file.write("\n" + status.text + "\n")
      #file.write('\n')

请注意使用os.linesep插入与操作系统无关的换行符 :).
您还可以通过重复两个linesep来写入两个换行符(将字符串乘以2)。
file.write('{0} {1} {0}'.format(os.linesep * 2, status.text)

哪个更干净。

你的顶级回答几乎有资格获得普及金徽章,我刚刚投了票,祝你好运 :) - Stephan
@sirvonandrethomas 编辑了我的答案,建议使用 os.linsep。你是在Windows上吗? - Vincenzo Pii
@VioncenzoPii 不,我在OSX ML上。 - sirvon
@sirvonandrethomas,你尝试过 linesep 吗? 我现在很好奇! - Vincenzo Pii
是的,我已经尝试了到目前为止的每个代码示例,它都重复了相同的行为。所有数据都被添加到一个连续的线上。 - sirvon
显示剩余3条评论

2
您的代码缩进在 with 语句中有误。
class CustomStreamListener(tweepy.StreamListener):
  def on_status(self, status):
    print status.text

    with open("myNewFile", "a") as file:
      file.write('\n')                           #move this over 1 indentation
      file.write("\n" + status.text + "\n")      #move this over 1 indentation
      file.write('\n')                           #move this over 1 indentation

也可以尝试使用'\r\n'代替仅使用'\n',因为UNIX和Windows处理换行符的方式不同。
另一个选项是像这样使用通用换行符支持打开文件。
    with open("myNewFile", "u") as file:

请注意,“u”模式在3.x中已被弃用,因为它是默认的。
编辑2: 看起来你的换行符出现在输出中。请参见这个相关问题

+1,干得好,我不知道有关于“u”选项的信息,http://www.python.org/dev/peps/pep-0278/ - Vincenzo Pii
通用换行符是用于读取的。您无法以通用换行符模式打开文件进行写入。 - user2357112
我也不知道。在另一个stackoverflow答案中找到的。 - Stephan

1
您可以使用以下语法:

print >>file, status.text

这个函数与普通的print函数相同,唯一不同的是它输出到文件中(因此它会像普通的print一样在末尾放置一个换行符)。

不行,我试过了。它只是把新内容添加到最后一次添加的末尾,不知道为什么会这样。 - sirvon
你确定你正在运行更新的代码吗?这个和@Vincenzo Pii的答案看起来都应该可以工作。 - Vyassa Baratham
这是相同的代码,逐字翻译...... 这就是我得到的结果... /n #LOQOOTV 通过使用标签向公共电视发送内容/n #LOQOOTV 不知道能否使用 Chromecast?? /n #LOQOOTV 保密 /n #LOQOOTV 测试 - sirvon
这些是被添加到文件中的推文。 - sirvon
我不太确定发生了什么,但是换行符的斜杠应该是反斜杠(\)。 - Vyassa Baratham
我不会把那些放进去,那只是你的代码产生的结果。 - sirvon

0

这可能有效:

entry = '\n' + status.text

f = open('myNewFile', 'a')
f.write(entry)
f.close()

我正在保存一个元组列表 [(a,b,c),(x,y,z),(p,q,r)]。如何将其保存到文本文件中,每个元组都在新行上? - DJ_Stuffy_K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接