Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: El mas antiguo en 17 Noviembre 2022, 15:18 pm



Título: TypeError: 'str' object cannot be interpreted as an integer(python)
Publicado por: El mas antiguo 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
 (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 ☕☕☕


Título: Re: TypeError: 'str' object cannot be interpreted as an integer(python)
Publicado por: AlbertoBSD 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.


Título: Re: TypeError: 'str' object cannot be interpreted as an integer(python)
Publicado por: El mas antiguo 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 ☕☕☕


Título: Re: TypeError: 'str' object cannot be interpreted as an integer(python)
Publicado por: Danielㅤ 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


Título: Re: TypeError: 'str' object cannot be interpreted as an integer(python)
Publicado por: El mas antiguo 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 ☕☕☕