Afdrukuitvoer naar een .txt-bestand sturen

Is er een manier om alle afdrukuitvoer op te slaan in een txt-bestand in python? Laten we zeggen dat ik deze twee regels in mijn code heb en dat ik de afdrukuitvoer wil opslaan in een bestand met de naam output.txt.

print ("Hello stackoverflow!")
print ("I have a question.")

Ik wil dat het bestand output.txt

. bevat

Hello stackoverflow!
I have a question.

Antwoord 1, autoriteit 100%

Geef printeen filetrefwoordargument, waarbij de waarde van het argument een bestandsstroom is. We kunnen een bestandsstroom maken met behulp van de functie open:

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

Van de Python-documentatie over print:

Het argument filemoet een object zijn met een write(string)-methode; als het niet aanwezig is of None, wordt sys.stdoutgebruikt.

En de documentatie voor open:

Open fileen retourneer een bijbehorend bestandsobject. Als het bestand niet kan worden geopend, wordt een OSErrorweergegeven.

De "a"als tweede argument van openbetekent “toevoegen” – met andere woorden, de bestaande inhoud van het bestand wordt niet overschreven. Als u wilt dat het bestand in plaats daarvan wordt overschreven, gebruikt u "w".


Het vaak openen van een bestand met openis echter niet ideaal voor de prestaties. Je zou het idealiter één keer moeten openen en een naam geven, en dan die variabele doorgeven aan print‘s fileoptie. U moet vergeet niet het bestand daarna te sluiten!

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

Er is hier ook een syntactische snelkoppeling voor, namelijk het with-blok. Dit zal uw bestand aan het einde van het blok voor u sluiten:

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

Antwoord 2, autoriteit 16%

Je kunt stdout omleiden naar een bestand “output.txt”:

import sys
sys.stdout = open('output.txt','wt')
print ("Hello stackoverflow!")
print ("I have a question.")

Antwoord 3, autoriteit 4%

Gebruik de logboekmodule

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

Haal de logger:

logger = init_logging()

En begin met loggen/output(ing):

logger.debug('Hi! :)')

Antwoord 4, Autoriteit 3%

Nog een methode zonder uw Python-code helemaal te updaten, zou zijn tot omleiden via de console .

Heb je eigenlijk je Python-script print()zoals gewoonlijk, bel het script van de opdrachtregel en gebruik de omleiding opdrachtregel. Zoals dit:

$ python ./myscript.py > output.txt

Uw output.txtBestand bevat nu alle uitvoer van uw Python-script.

bewerken:
Om de opmerking aan te pakken; Wijzig voor Windows de forward-Slash naar een backslash.
(d.w.z. .\myscript.py)


Antwoord 5, Autoriteit 2%

Nog een variatie kan zijn … Zorg ervoor dat u het bestand achteraf sluit

import sys
file = open('output.txt', 'a')
sys.stdout = file
print("Hello stackoverflow!") 
print("I have a question.")
file.close()

Antwoord 6

Stel dat mijn invoerbestand is “Input.txt” en uitvoerbestand is “output.txt”.

Laten we overwegen het invoerbestand heeft details om te lezen:

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)

Dus dit wordt gelezen van het invoerbestand en wordt de uitvoer weergegeven in het uitvoerbestand.

Zie voor meer informatie https: / /www.geeksforgeeks.org/inputoutput-external-file-cc-java-pypython-competitive-programming/


Antwoord 7

Men kan de geretourneerde uitvoer van een functie rechtstreeks toevoegen aan een bestand.

print(output statement, file=open("filename", "a"))

Other episodes