【问题标题】:How to print a file to stdout?如何将文件打印到标准输出?
【发布时间】:2023-08-19 19:33:01
【问题描述】:

我已经搜索过,我只能找到关于另一种方式的问题:将标准输入写入文件。

有没有快速简便的方法将文件内容转储到stdout

【问题讨论】:

    标签: python


    【解决方案1】:

    当然。假设您有一个名为fname 的文件名的字符串,则可以使用以下方法。

    with open(fname, 'r') as fin:
        print(fin.read())
    

    【讨论】:

    • 请注意,这将在输出末尾添加一个额外的换行符。
    • 对于 Python 3 的兼容性避免尾随换行,最后一行应该是:print(fin.read(), end="")。要在 Python 2 下利用该解决方案,需要前缀 from __future__ import print_function。当然,Python 2 应用程序应该总是使用 Python 3 print() 函数——所以这不是什么负担。
    【解决方案2】:

    如果它是一个大文件,并且您不想像 Ben 的解决方案那样消耗大量内存,那么

    中的额外代码
    >>> import shutil
    >>> import sys
    >>> with open("test.txt", "r") as f:
    ...    shutil.copyfileobj(f, sys.stdout)
    

    也可以。

    【讨论】:

      【解决方案3】:
      f = open('file.txt', 'r')
      print f.read()
      f.close()
      

      来自http://docs.python.org/tutorial/inputoutput.html

      要读取文件的内容,请调用 f.read(size),它会读取一定数量的数据并将其作为字符串返回。 size 是一个可选的数字参数。当 size 省略或为负时,将读取并返回文件的全部内容;如果文件是机器内存的两倍,那是你的问题。否则,最多读取并返回 size 个字节。如果已到达文件末尾,f.read() 将返回一个空字符串 ("")。

      【讨论】:

        【解决方案4】:

        我在 Python3 中的缩短版

        print(open('file.txt').read())
        

        【讨论】:

        • 注意:这不会关闭文件。
        【解决方案5】:

        你也可以试试这个

        print ''.join(file('example.txt'))

        【讨论】:

          【解决方案6】:

          如果你在jupyter notebook,你可以简单地使用:

          !cat /path/to/filename
          

          【讨论】:

            【解决方案7】:

            你可以试试这个。

            txt = <file_path>
            txt_opn = open(txt)
            print txt_opn.read()
            

            这将为您提供文件输出。

            【讨论】:

              【解决方案8】:

              如果您需要使用pathlib 模块执行此操作,您可以使用pathlib.Path.open() 打开文件并打印来自read() 的文本:

              from pathlib import Path
              
              fpath = Path("somefile.txt")
              
              with fpath.open() as f:
                  print(f.read())
              

              或者直接拨打pathlib.Path.read_text():

              from pathlib import Path
              
              fpath = Path("somefile.txt")
              
              print(fpath.read_text())
              

              【讨论】:

                【解决方案9】:

                为了改进@bgporter 的答案,使用 Python-3,您可能希望对字节进行操作,而不是不必要地将内容转换为 utf-8:

                >>> import shutil
                >>> import sys
                >>> with open("test.txt", "rb") as f:
                ...    shutil.copyfileobj(f, sys.stdout.buffer)
                

                【讨论】:

                  【解决方案10】:

                  对文件的行迭代器进行操作(如果您以文本模式打开——默认)既简单又节省内存:

                  with open(path, mode="rt") as f:
                      for line in f:
                          print(line, end="")
                  

                  请注意end="",因为这些行将包含它们的行尾字符。

                  这几乎正是(其他)Ben 的回答中链接的文档中的示例之一:https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

                  【讨论】:

                    最近更新 更多