【问题标题】:Python Save to filePython 保存到文件
【发布时间】:2012-03-21 03:47:29
【问题描述】:

我想用一个名为Failed.py的python程序将一个字符串保存到一个文件中

这是我目前所拥有的:

myFile = open('today','r')

ips = {}

for line in myFile:
    parts = line.split(' ')
    if parts[1] == 'Failure':
        if parts[0] in ips:
            ips[pars[0]] += 1
        else:
            ips[parts[0]] = 0

for ip in [k for k, v in ips.iteritems() if v >=5]:
    #write to file called Failed.py

【问题讨论】:

  • 纯粹出于好奇:有没有办法将一个答案变成可接受的答案? (Stefan 似乎多年不活跃)
  • 真正的问题是什么?
  • @Wolf 不,这是故意的。复选标记的含义不是“这是唯一的真理”,而是“这是让 OP 高兴的答案”。有很好答案但没有勾选标记的问题并不会降低它们的实用性。

标签: python python-2.7


【解决方案1】:
file = open('Failed.py', 'w')
file.write('whatever')
file.close()

这里有一个更pythonic的版本,它会自动关闭文件,即使被包装的块中有异常:

with open('Failed.py', 'w') as file:
    file.write('whatever')

【讨论】:

  • file 在 python 中不是一个受保护的字,没有必要使用file_,除非你的编码风格指南要求在任何上下文(文件、函数、类)的变量上使用_ 后缀, 方法) 这发生在。
  • 这与编码风格无关。 file 是作为many others 的内置函数。 not recommended 用其他变量来隐藏这些内置函数。
  • file 在 python 3 中已被弃用和删除,所以在那里使用是完全可以的。没看到题上的2.7标签,一般都是用python 3...
  • @Anatoly 你没有关闭文件
  • @warvariuc 谢谢你,你是对的,那么这似乎不是一个最佳实践
【解决方案2】:

您需要再次使用open() 打开文件,但这次通过'w' 表示您要写入文件。我还建议使用with 以确保在您完成写入文件后关闭文件。

with open('Failed.txt', 'w') as f:
    for ip in [k for k, v in ips.iteritems() if v >=5]:
        f.write(ip)

当然,您可能希望在输出中包含换行符或其他格式,但基本内容如上。

关闭文件的同样问题也适用于阅读代码。应该是这样的:

ips = {}
with open('today','r') as myFile:
    for line in myFile:
        parts = line.split(' ')
        if parts[1] == 'Failure':
            if parts[0] in ips:
                ips[pars[0]] += 1
            else:
                ips[parts[0]] = 0

【讨论】:

    【解决方案3】:

    你可以使用这个功能:

    def saveListToFile(listname, pathtosave):
        file1 = open(pathtosave,"w") 
        for i in listname:
            file1.writelines("{}\n".format(i))    
        file1.close() 
    
    # to save:
    saveListToFile(list, path)
    

    【讨论】:

      【解决方案4】:

      为了在Python中写入文件,我们需要以写入w、追加a或独占创建x模式打开它。

      我们需要小心w 模式,因为如果文件已经存在,它将覆盖到文件中。因此,所有以前的数据都将被删除。

      使用 write() 方法写入字符串或字节序列(对于二进制文件)。此方法返回写入文件的字符数。

      with open('Failed.py','w',encoding = 'utf-8') as f:
         f.write("Write what you want to write in\n")
         f.write("this file\n\n")
      

      如果当前目录不存在,该程序将在当前目录中创建一个名为Failed.py 的新文件。如果确实存在,则将其覆盖。

      我们必须自己包含换行符以区分不同的行。

      【讨论】:

      • @Stefan 如果解决了您的问题,请将其标记为已接受。
      【解决方案5】:
      myFile = open('today','r')
      
      ips = {}
      
      for line in myFile:
          parts = line.split()
          if parts[1] == 'Failure':
              ips.setdefault(parts[0], 0)
              ips[parts[0]] += 1
      
      of = open('failed.py', 'w')
      for ip in [k for k, v in ips.iteritems() if v >=5]:
          of.write(k+'\n')
      

      查看 setdefault,它使代码更清晰。然后使用文件对象的 write 方法转储数据。

      【讨论】:

      • 正是他所说的。在末尾附加一个 of.close 。否则,您假设 GC 将关闭该文件。显式优于隐式。谢谢。
      • @jaime 你真的需要做的不仅仅是打电话给close。您需要在 finally 块中执行此操作以防御异常。惯用的方法是使用 with 上下文处理程序。
      • 是的,谢谢。这让我想到了,但我担心解释什么时候最终会被叫到。然后在阅读了您的评论后,我意识到他标记了问题 python-2.7。谢谢。
      猜你喜欢
      • 2019-04-09
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多