【问题标题】:Using print with open=将 print 与 open= 一起使用
【发布时间】:2019-01-29 14:25:11
【问题描述】:

我正在尝试将以下代码打印到文件中。 查看堆栈溢出,我发现了 file=open 代码,但它似乎没有写入文件。

PS。我还没有创建文件

print("Average Grade " + str(average), "At least 70% " + 
      str(Grade1), "60% - 69% " + str(Grade2), "50% - 59% " +
      str(Grade3), "40% - 49% " + str(Grade4), "Less than 40% " + 
      str(Grade5), "Highest Grade " +
      str(max_grade), "Student Name:" + str(student_name), sep="\n", 
      file=open("results.txt", 'a'))

【问题讨论】:

  • 打印字符串并不意味着将其写入文件。使用file.write(yourstring) 来实际操作。此外,如果可能,请使用上下文管理器。
  • 什么意思?我对此还是很陌生
  • 这是我找到代码的地方。 stackoverflow.com/questions/36571560/…
  • print 中使用file=... 参数应该可以工作。也许您想发布minimal reproducible example 以便读者重现您的问题。
  • 您的代码适用于我(python 3.6)。您是否在正确的目录中查看results.txt,并且在程序运行之后?

标签: python python-3.x file-io


【解决方案1】:

在 python 中,我们通常不使用 print 语句来执行此操作。考虑以下替代方案。使用“上下文管理器”可以让您编写多行代码,如果程序在写入文件时抛出错误,也有助于避免某些问题。

with open('results.txt', 'a') as f:
    line = "Average Grade " + str(average), "At least 70% " + str(Grade1), "60% - 69% " + str(Grade2), "50% - 59% " + str(Grade3), "40% - 49% " + str(Grade4), "Less than 40% " + str(Grade5), "Highest Grade " + str(max_grade), "Student Name:" + str(student_name)
    f.write(line)

顺便说一句,如果您以交互方式执行此操作,您可能不会立即看到写入文件的数据 - 当使用终端而不是运行脚本时,这可能是一个真正的混淆点!发生的情况是python以大块的形式将数据写入文件,而不是每次调用f.write时都要求硬盘驱动器工作。 flushing 输出缓冲区告诉 python 立即写入数据 - 例如 f.flush()

print 语句实际上确实有一个flush 参数,因为这个原因,这可能是高度相关的。不过,我还是建议改用 with 语句。

【讨论】:

    【解决方案2】:

    试试这个:

    file = open("Here you put your path to a file, but replace '\' with '\\'", 'w+')
    # That opened your file in 'write' mode, and '+' means that if it does not 
    # exist, one will be created
    file.write("Average Grade " + str(average), "At least 70% " + 
    str(Grade1), "60% - 69% " + str(Grade2), "50% - 59% " +
    str(Grade3), "40% - 49% " + str(Grade4), "Less than 40% " + 
    str(Grade5), "Highest Grade " +
    str(max_grade), "Student Name:" + str(student_name))
    file.close()
    

    【讨论】:

      【解决方案3】:
      with open("results.txt", 'a') as f:
          f.write("Average Grade " + str(average), "At least 70% " + 
          str(Grade1), "60% - 69% " + str(Grade2), "50% - 59% " +
          str(Grade3), "40% - 49% " + str(Grade4), "Less than 40% " + 
          str(Grade5), "Highest Grade " +
          str(max_grade), "Student Name:" + str(student_name))
      

      请注意,open 中的 'a' 选项用于追加。您也可以使用 'w' 进行写入。

      【讨论】:

        【解决方案4】:

        我让它工作了。我打开了文件,然后在打印结束时使用了 file=。

        newFile = open("results.txt", 'w')
        
        print("Average Grade " + str(average), "At least 70% " + str(Grade1), "60% - 69% " + str(Grade2), "50% - 59% " +
          str(Grade3), "40% - 49% " + str(Grade4), "Less than 40% " + str(Grade5), "Highest Grade " +
          str(max_grade), "Student Name:" + str(student_name), sep="\n", file=newFile)
        
        newFile.close()
        

        【讨论】:

          猜你喜欢
          • 2018-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-26
          • 2023-03-12
          • 1970-01-01
          相关资源
          最近更新 更多