elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  TypeError: 'str' object cannot be interpreted as an integer(python)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: TypeError: 'str' object cannot be interpreted as an integer(python)  (Leído 2,941 veces)
El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
TypeError: 'str' object cannot be interpreted as an integer(python)
« en: 17 Noviembre 2022, 15:18 pm »

Hola gente, ¿ cómo están? Créanme que pase un rato buscando la manera de solucionar esto, pero como es la primera vez que trabajo con archivo binario no hay manera de conseguirlo.-
Siendo prejuicioso, debo decir que debe ser algo muy simple lo que me falta, pero no me cae la ficha.-
Esto tiene que ver con el post anterior, quiero medir el peso en disco de un archivo plano y uno binario.-

https://foro.elhacker.net/scripting/bases_de_datos_utilizando_archivo_txt_en_python-t516456.0.html


Código
  1. def main():
  2.    otra=[f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(1,100_001)]
  3.    with open("numeros.bin","wb") as archivo:
  4.        archivo.write(bytearray(otra))
  5.  
  6. if __name__ == "__main__":
  7.    main()

Slds. Daniel ☕☕☕


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: TypeError: 'str' object cannot be interpreted as an integer(python)
« Respuesta #1 en: 17 Noviembre 2022, 15:44 pm »

Hay que aprender a leer los errores:


Código:
Traceback (most recent call last):
  File "f.py", line 7, in <module>
    main()
  File "f.py", line 4, in main
    archivo.write(bytearray(otra))
TypeError: 'str' object cannot be interpreted as an integer

Basicamente dice que le estas pasando un list a la funcion y esta esperaba un Integer o un string, si buscamos la documentacion de esa funcion dice que:

Citar
bytearray() Parameters
bytearray() takes three optional parameters:

source (Optional) - source to initialize the array of bytes.
encoding (Optional) - if the source is a string, the encoding of the string.
errors (Optional) - if the source is a string, the action to take when the encoding conversion fails (Read more: String encoding)

Hay varios ejemplos:

https://www.programiz.com/python-programming/methods/built-in/bytearray

El ejemplo tendria que quedar asi:

Código:
def main():
    otra=[f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(1,100_001)]    with open("numeros.bin","wb") as archivo:
        archivo.write(bytearray(''.join(otra),'utf-8'))

if __name__ == "__main__":
    main()

Se realiza un join por que bytearray no puede recibir una Lista

Por cierto esos strings dificilmente  van a ocupar menos espacio.


En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: TypeError: 'str' object cannot be interpreted as an integer(python)
« Respuesta #2 en: 17 Noviembre 2022, 22:31 pm »

Bueno, al fin, ahora funciona como lo esperado…

Código
  1. def main():
  2.    otra=[f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(1,100_001)]
  3.    with open("numeros.bin","wb") as archivo:
  4.        archivo.write(bytearray(''.join(otra),'utf-8'))
  5.  
  6. if __name__ == "__main__":
  7.    main()

Slds. Daniel ☕☕☕
En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.675


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: TypeError: 'str' object cannot be interpreted as an integer(python)
« Respuesta #3 en: 17 Noviembre 2022, 23:16 pm »

Hola, también podes hacer la conversión del tipo de variable antes de la apertura del archivo, es decir desde la misma variable en donde se crea la cadena, de hecho yo lo haría de esa manera:

Código
  1. def main():
  2.    otra = "".join([f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(1,100_001)])
  3.    with open("numeros.bin","wb") as archivo:
  4.    archivo.write(bytearray(otra))
  5.  
  6. if __name__ == "__main__":
  7.    main()

Una pregunta, que software editor de códigos de programación estas usando?, te recomiendo el que yo siempre use que es el Notepad++.


Saludos
« Última modificación: 17 Noviembre 2022, 23:20 pm por Danielㅤ » En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: TypeError: 'str' object cannot be interpreted as an integer(python)
« Respuesta #4 en: 18 Noviembre 2022, 00:05 am »

Hola Dani, ¿cómo estás?, muy interesante, me gusta esa manera.-
En cuanto al IDE utilizo Thonny para cosas chicas y cuando lo que
estoy estudiando se pone más complicado, PyScripter.-

Slds. Daniel ☕☕☕
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines