Python Forum
Print/write to file function
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Print/write to file function
#1
Hello All can someone help me with the below code. Ive been working to try and get the output printed to a file with the datetime but each route Ive tried I seem to get an error can anyone point out what I am doing wrong?

#! /usr/bin/python3.6

import pymysql
import datetime
date = str(datetime.date.today()-datetime.timedelta(1))
filename = datetime.datetime.now()
print(date)
 
 
 
try:
    db_con1 = pymysql.connect(host='nhmanpncblt01.xxx.xxx.com', port=3306, user='xxx', passwd='xxx', db='photonicnetworkcaptures')
    sql_select_Query = "select * from pncnetwork where startTime regexp \'^{}\'".format(date)
    db_con2 = pymysql.connect(host='nhmanpnckey01.xxx.xxx.com', port=3306, user='xxx', passwd='xxx', db='photonicnetworkcaptures')
    sql_select_Query = "select * from pncnetwork where startTime regexp \'^{}\'".format(date)
    db_con3 = pymysql.connect(host='nhmanpncfre01.xxx.xxx.com', port=3306, user='xxx', passwd='xxx', db='photonicnetworkcaptures')
    sql_select_Query = "select * from pncnetwork where startTime regexp \'^{}\'".format(date)
    db_con4 = pymysql.connect(host='NHMANPNCNE01.xxx.xxx.com', port=3306, user='xxx', passwd='xxx', db='photonicnetworkcaptures')
    sql_select_Query = "select * from pncnetwork where startTime regexp \'^{}\'".format(date)
    cursor1 = db_con1.cursor()
    cursor2 = db_con2.cursor()
    cursor3 = db_con3.cursor()
    cursor4 = db_con4.cursor()
    cursor1.execute(sql_select_Query)
    cursor2.execute(sql_select_Query)
    cursor3.execute(sql_select_Query)
    cursor4.execute(sql_select_Query)
    records1 = cursor1.fetchall()
    records2 = cursor2.fetchall()
    records3 = cursor3.fetchall()
    records4 = cursor4.fetchall()
    sys.stdout = open(filename.strftime("%d %B %Y")+".txt", "w")

    print ("Total number of rows in pncnetwork is: ", cursor1.rowcount + cursor2.rowcount + cursor3.rowcount + cursor4.rowcount)
    print ("\nPrinting each pncnetwork record")
    for row in records1:
        print("{}, {}".format("Beltway", row[2], row[3]))
    for row in records2:
        print("{}, {}".format("Keystone", row[2], row[3]))
    for row in records3:
        print("{}, {}".format("Freedom", row[2], row[3]))
    for row in records4:
        print("{}, {}".format("New England", row[2], row[3]))


except Exception as e:
    print("ERROR ", str(e))
 
finally:
    db_con1.close()
    db_con2.close()
    db_con3.close()
    db_con4.close()

sys.stdout.close()
./pncnetworktest.py
2020-03-31
ERROR name 'sys' is not defined
Traceback (most recent call last):
File "./pncnetworktest.py", line 55, in <module>
sys.stdout.close()
NameError: name 'sys' is not defined
Reply
#2
To use sys.stdout you need to import the sys package, but you have no need to call sys.stdout.close().

Next google "Python print to file" and you will learn all about files and how you create files and write to files.

One last thing, is 2020-03-31 a valid file name on your computer? If you want to write to a file you have to give the file a name that is compatible with your operating system. Make sure to give the file and appropriate extension so you can use the file outside your program or at least provide a hint about how the file is used.
Reply
#3
(Apr-01-2020, 03:43 PM)deanhystad Wrote: To use sys.stdout you need to import the sys package, but you have no need to call sys.stdout.close().

Next google "Python print to file" and you will learn all about files and how you create files and write to files.

One last thing, is 2020-03-31 a valid file name on your computer? If you want to write to a file you have to give the file a name that is compatible with your operating system. Make sure to give the file and appropriate extension so you can use the file outside your program or at least provide a hint about how the file is used.

Yes the name is the output of the last DB backup which I am checking. The code is running on a Linux machine so I can nano and open the file. So the last statement I can remove, will this theory work for printing the screen output to a file as is like or is this a more complicated way about it? Just asking as I’m very new to this. The python class I had attended was for python 2 not three so that’s where my biggest struggle is. All the ex soles I have appear not to work in 3
Reply
#4
Ooops! I missed sys.stdout = open(filename.strftime("%d %B %Y")+".txt", "w"). Even has a file extension. Hmmm, oh well.

So what isn't working? Is the file created? Does the file contain "Total number of rows in pncnetwork is:"? What do you see after that?

If the file is not created, is it a permissions problem? Where are you trying to create the file? Or are you getting an exception. A problem with redirecting stdout to a file is this doesn't work:
except Exception as e:
    print("ERROR ", str(e))
You would need to print that to stderr. If your really want to redirect stdout I would leave out exception handling until things are working.
Reply
#5
(Apr-01-2020, 04:57 PM)deanhystad Wrote: Ooops! I missed sys.stdout = open(filename.strftime("%d %B %Y")+".txt", "w"). Even has a file extension. Hmmm, oh well.

So what isn't working? Is the file created? Does the file contain "Total number of rows in pncnetwork is:"? What do you see after that?

If the file is not created, is it a permissions problem? Where are you trying to create the file? Or are you getting an exception. A problem with redirecting stdout to a file is this doesn't work:
except Exception as e:
    print("ERROR ", str(e))
You would need to print that to stderr. If your really want to redirect stdout I would leave out exception handling until things are working.

The file gets created however the data for number of rows, and also the rows caller out in the print line are not placed in the file, it’s just blank. I’m not sure what or where I did this incorrectly
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How can I write formatted (i.e. bold, italic, change font size, etc.) text to a file? JohnJSal 12 27,844 Feb-13-2025, 04:48 AM
Last Post: tomhansky
  How to write variable in a python file then import it in another python file? tatahuft 4 864 Jan-01-2025, 12:18 AM
Last Post: Skaperen
  [SOLVED] [Linux] Write file and change owner? Winfried 6 1,481 Oct-17-2024, 01:15 AM
Last Post: Winfried
  Cannot get cmd to print Python file Schauster 11 3,025 May-16-2024, 04:40 PM
Last Post: xMaxrayx
  What does .flush do? How can I change this to write to the file? Pedroski55 3 1,302 Apr-22-2024, 01:15 PM
Last Post: snippsat
  print doesnt work in a function ony 2 1,038 Mar-11-2024, 12:42 PM
Last Post: Pedroski55
  Last record in file doesn't write to newline gonksoup 3 1,525 Jan-22-2024, 12:56 PM
Last Post: deanhystad
  write to csv file problem jacksfrustration 11 4,840 Nov-09-2023, 01:56 PM
Last Post: deanhystad
  python Read each xlsx file and write it into csv with pipe delimiter mg24 4 3,731 Nov-09-2023, 10:56 AM
Last Post: mg24
  How do I read and write a binary file in Python? blackears 6 24,203 Jun-06-2023, 06:37 PM
Last Post: rajeshgk

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020