Directing print output to a .txt file

后端 未结 7 2434
北荒
北荒 2020-11-27 13:03

Is there a way to save all of the print output to a txt file in python? Lets say I have the these two lines in my code and I want to save the print output to a file named

相关标签:
7条回答
  • 2020-11-27 13:12

    You can redirect stdout into a file "output.txt":

    import sys
    sys.stdout = open('output.txt','wt')
    print ("Hello stackoverflow!")
    print ("I have a question.")
    
    0 讨论(0)
  • 2020-11-27 13:16

    Another Variation can be... Be sure to close the file afterwards

    import sys
    file = open('output.txt', 'a')
    sys.stdout = file
    
    print("Hello stackoverflow!") 
    print("I have a question.")
    
    file.close()
    
    0 讨论(0)
  • 2020-11-27 13:16

    Another method without having to update your Python code at all, would be to redirect via the console.

    Basically, have your Python script print() as usual, then call the script from the command line and use command line redirection. Like this:

    $ python ./myscript.py > output.txt
    

    Your output.txt file will now contain all output from your Python script.

    Edit:
    To address the comment; for Windows, change the forward-slash to a backslash.
    (i.e. .\myscript.py)

    0 讨论(0)
  • 2020-11-27 13:22

    Use the logging module

    def init_logging():
        rootLogger = logging.getLogger('my_logger')
    
        LOG_DIR = os.getcwd() + '/' + 'logs'
        if not os.path.exists(LOG_DIR):
            os.makedirs(LOG_DIR)
        fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2"))
        rootLogger.addHandler(fileHandler)
    
        rootLogger.setLevel(logging.DEBUG)
    
        consoleHandler = logging.StreamHandler()
        rootLogger.addHandler(consoleHandler)
    
        return rootLogger
    

    Get the logger:

    logger = init_logging()
    

    And start logging/output(ing):

    logger.debug('Hi! :)')
    
    0 讨论(0)
  • 2020-11-27 13:25

    Suppose my input file is "input.txt" and output file is "output.txt".

    Let's consider the input file has details to read:

    5
    1 2 3 4 5
    

    Code:

    import sys
    
    sys.stdin = open("input", "r")
    sys.stdout = open("output", "w")
    
    print("Reading from input File : ")
    n = int(input())
    print("Value of n is :", n)
    
    arr = list(map(int, input().split()))
    print(arr)
    

    So this will read from input file and output will be displayed in output file.

    For more details please see https://www.geeksforgeeks.org/inputoutput-external-file-cc-java-python-competitive-programming/

    0 讨论(0)
  • 2020-11-27 13:32

    Give print a file keyword argument, where the value of the argument is a file stream. We can create a file stream using the open function:

    print("Hello stackoverflow!", file=open("output.txt", "a"))
    print("I have a question.", file=open("output.txt", "a"))
    

    From the Python documentation about print:

    The file argument must be an object with a write(string) method; if it is not present or None, sys.stdout will be used.

    And the documentation for open:

    Open file and return a corresponding file object. If the file cannot be opened, an OSError is raised.

    The " a " as the second argument of open means "append" - in other words, the existing contents of the file won't be overwritten. If you want the file to be overwritten instead, use "w".


    Opening a file with open many times isn't ideal for performance, however. You should ideally open it once and name it, then pass that variable to print's file option. You must remember to close the file afterward!

    f = open("output.txt", "a")
    print("Hello stackoverflow!", file=f)
    print("I have a question.", file=f)
    f.close()
    

    There's also a syntactic shortcut for this, which is the with block. This will close your file at the end of the block for you:

    with open("output.txt", "a") as f:
        print("Hello StackOverflow!", file=f)
        print("I have a question.", file=f)
    
    0 讨论(0)
提交回复
热议问题