[Python] Error leer archivo

Iniciado por Arnau27, 30 Abril 2012, 23:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Arnau27

Esta es la parte del script donde tengo problemas, lo que quiero esque esta parte del codigo solo se ejecute la primera vez que se ejecute el script. Pense que necesitaria una variable i en funcion de si esta es 0 o 1 se ejecutara esa parte del codigo o no. Como con una variable en el script siempre seria igual a 0 (ejemplo: e=0 , while e<1,e=e+1, *cerramos scipt, volvemos a abrirlo, e vuelve a ser = 0) se me ocurrio que ya que estaba jugando con los archivos txt en este script pues podria incluir la variable en un archiv txt. Pero mi problema viene al intentar leer lo que he escrito, no entiendo porque > UnsupportedOperation: not readable .
Xk no lo puedo leer?

Aclaro: Por si un caso aclaro que cuando abrimos un archivo con "w" para que sea escrito tiene que ser nuevo, es decir que si ya existe no se podra escribir. Para poder escribir en un archivo que ya existe utilizamos a.
Código (python) [Seleccionar]

st=0
xt=open("num.txt", "w")
stt=str(st)
xt.write(stt)

f=xt.read()
lf=int(f)

while lf<1:
startpass=input("To get started you must write a password. ")
sure=input("Are you sure?")
if sure==no:
print("Ok")
elif sure==yes:
tx=open("pass.txt", "a")
tx.write(startpass)
os.remove("num.txt")
xt=open("num.txt", "w")
xt.write("1")
print("Enjoy using SF ;)")
break
else:
pritn("Please write yes or no.")

_
Ademas de intentar solucionar este problema de lectura de archivos (que no entiendo ya que en una de las funciones que uso en el script lo puedo leer :S) espero que me aconsejen sobre otras formas de hacerlo que no sea la de 0 i 1 en un archivo txt.

Gracias.




Elektro H@cker: Usa el botón "Insertar código"
La confianza es la base de la elegancia.

mael0c

Hola!
Al abrir el fichero en modo escritura no te deja leerlo. Tienes que cerrarlo y después volver a abrirlo en modo lectura.

0x5d

Hola, buen día !

Recuerda es no es una buena práctica abrir archivos (open()) y no usar close()
Otra cosa que me llama la atención de tu código es esto:
Código (python) [Seleccionar]
sure=input("Are you sure?")
if sure==no:
print("Ok")
elif sure==yes:

Que versión de Python usas ? , pues en la 2.7 que es una de las más usadas eso daría error... Pero por tu forma de usar el print, debes usar Python 3.X
Pues :
input = para valores numéricos
raw_input = para valores alfanuméricos

Y pues cuando realizas la comparación , la condición igual está errada, pues como indicaba anteriormente... input no es comparable con un texto, y pues al no usar comillas en tu condición, el código entenderá que "no" es una variable y no un string, lo mismo con el "yes".

Bueno ese sería mi aporte :P

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

Arnau27

#3
Cita de: 0x5d en  1 Mayo 2012, 08:19 AM
Que versión de Python usas ? , pues en la 2.7 que es una de las más usadas eso daría error... Pero por tu forma de usar el print, debes usar Python 3.X
Pues :
input = para valores numéricos
raw_input = para valores alfanuméricos

Y pues cuando realizas la comparación , la condición igual está errada, pues como indicaba anteriormente... input no es comparable con un texto, y pues al no usar comillas en tu condición, el código entenderá que "no" es una variable y no un string, lo mismo con el "yes".

Bueno ese sería mi aporte :P

Saludos, Javier.

Gracias por tu aporte, efectivamente uso python 3.2. Pero lo que me comentas de raw_input cuando lanzaron la version 3.0, raw_input dejo de existir para convertirse solo en input que hace la funcion de los 2.
Compruebalo aqui: http://docs.python.org/dev/py3k/whatsnew/3.0.html

Alguien sabe alguna solucion diferente a lo que pido?

Edito: Consegui solucionar el problema :) gracias igualmente por todos los aportes. Asi es como quedó.

Código (python) [Seleccionar]
def tri():
global xt
try:
xt=open("reg.txt","r")
tt=xt.read()
xt.close()
return
except IOError:
xt=open("reg.txt","a")
xt.write("registered")
xt.close()
getstarted()

while i:
tri()
break
La confianza es la base de la elegancia.

0x5d

:P Si sé que en Py 3.X cambia el input y raw_input() solo quería saber tu versión de Python para saber si estabas usando bien el input o no :P
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !