Python Forum

Full Version: write an integer to file using a function
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello All - Python newbie here. I develop using pycharm aided by w3schools. I am playing with writing functions atm. Question is, i can't seem to write an integer to file using the code below. it works fine with writing a string to file, but not integer. Is it possible to do so, or there's some rule i'm unaware of? I posted the console output below the code as well. Thanks in advance.


#creating and using a function
z1 = open("C:\Users\Kingsley\Projects\X\wite.csv", "w")  #global variable 01 set, file create/open
v = "python is "       #global variable 02 set
x = "pretty awesome " #global variable 03 set
y = "and amazing" #global variable 04 set
print(v + x + y), "\n"

def joinFunction(): #defining a function called "joinFunction"
  x = 5             #joinFunction has a variable local to it called x. x is equal to a
  y = 6             #joinFunction has a variable local to it called y. y is equal to b
  z = x + y         #local variable z is the value of 5 + 6
  z1.write(z)#>>>>problem code here. i can't  write integer to file. Not sure why? i think it breaks the joinfunction too.
  z1.close()
joinFunction()       

print(v + x + y)       #prints the combination of the global variables defined above

#joinFunction()

The console output:

C:\Users\Kingsley\Projects\PyCharm\Second\venv\Scripts\python.exe C:/Users/Kingsley/Projects/PyCharm/Second/M2.py
python is pretty awesome and amazing

Traceback (most recent call last):
File "C:/Users/Kingsley/Projects/PyCharm/Second/M2.py", line 14, in <module>
joinFunction()
File "C:/Users/Kingsley/Projects/PyCharm/Second/M2.py", line 12, in joinFunction
z1.write(z)
TypeError: expected a string or other character buffer object

Process finished with exit code 1
Can convert with str(z) or better in many cases is to use string formatting f-string.
with open('out.txt', 'w') as f:
    x = 5
    y = 6
    z = x + y
    f.write(f'Result is {z}')
Output:
Result is 11
Convert to str(z) work. And pick up f-string formatting. Thanks! A follow-up then.

I call the joinfunction twice in the code below. The results seem to be written to the same line in the file. i tried putting "\n" at the end of:
z1.write(str(z)),"\n"
but it still seems to write to the same line instead of the next line. Any ideas


#creating and using a function
z1 = open("C:\Users\Kingsley\Projects\X\wite.csv", "w")  #global variable 01 set
v = "python is "       #global variable 02 set
x = "pretty awesome " #global variable 03 set
y = "and amazing" #global variable 04 set
print(v + x + y), "\n"

def joinFunction(): #defining a function called "joinFunction"
  x = 5             #joinFunction has a variable local to it called x. x is equal to a
  y = 6             #joinFunction has a variable local to it called y. y is equal to b
  z = x + y         #local variable z is the value of 5 + 6
  z1.write(str(z)), "\n"
#  z1.close()
joinFunction()

print(v + x + y)       #prints the combination of the global variables defined above

joinFunction()
Use str(z) + "\n".
Here some fixes in your code,use 4-space indentation,a function should take argument,
and not getting the value for global namespace over.
Use r raw string in Path,you are using Python 2 as C:\Users will give SyntaxError in Python 3.
r"C:\Users\Kingsley\Projects\X\wite.csv"
Use Python 3,not Python 2 as is dead in under a month.
def joinFunction(z1, s):
    x = 5
    y = 6
    z = x + y
    z1.write(str(z) + "\n" + s)
    z1.close()

z1 = open("wite.csv", "w")
v = "python is "
x = "pretty awesome "
y = "and amazing"
s = v + x + y
joinFunction(z1, s)
Output:
11 python is pretty awesome and amazing
With f-string can just put in \n.
with open('out.txt', 'w') as f:
    x = 5
    y = 6
    z = x + y
    c = x ** y
    f.write(f'Result is {z}\nResult is {c}')
Output:
Result is 11 Result is 15625
That works. And thanks for the feedback on best practices too. These hints really helps with the learning process.

To your point, I do code with Python 2 on Windows, but also run Python 3 on CentOS so i'll probably start coding with the raw string in path as suggested going forward. Thx again.