una txt sobreescribir partir lista importar guardar gestion ejercicios dat crear como binarios archivos archivo python

txt - Cómo iterar sobre el archivo en python



gestion de archivos en python (5)

Deberías aprender sobre EAFP vs LBYL .

from sys import stdin, stdout def main(infile=stdin, outfile=stdout): if isinstance(infile, basestring): infile=open(infile,''r'') if isinstance(outfile, basestring): outfile=open(outfile,''w'') for lineno, line in enumerate(infile, 1): line = line.strip() try: print >>outfile, int(line,16) except ValueError: return "Bad value at line %i: %r" % (lineno, line) if __name__ == "__main__": from sys import argv, exit exit(main(*argv[1:]))

Tengo un archivo de texto con algunos números hexadecimales y estoy tratando de convertirlo a decimal. Pude convertirlo con éxito, pero parece que antes de que exista el bucle lee algún carácter no deseado y me aparece el siguiente error.

Traceback (most recent call last): File "convert.py", line 7, in <module> print >>g, int(x.rstrip(),16) ValueError: invalid literal for int() with base 16: ''''

Mi código es el siguiente

f=open(''test.txt'',''r'') g=open(''test1.txt'',''w'') #for line in enumerate(f): while True: x=f.readline() if x is None: break print >>g, int(x.rstrip(),16)

Cada número hexadecimal viene en una nueva línea para la entrada


El rastreo indica que probablemente tenga una línea vacía al final del archivo. Puedes arreglarlo así:

f = open(''test.txt'',''r'') g = open(''test1.txt'',''w'') while True: x = f.readline() x = x.rstrip() if not x: break print >> g, int(x, 16)

Por otro lado, sería mejor usar for x in f lugar de readline . No olvide cerrar sus archivos o utilizarlos para cerrarlos por usted:

with open(''test.txt'',''r'') as f: with open(''test1.txt'',''w'') as g: for x in f: x = x.rstrip() if not x: continue print >> g, int(x, 16)


Esto probablemente se deba a una línea vacía al final de su archivo de entrada.

Prueba esto:

for x in f: try: print int(x.strip(),16) except ValueError: print "Invalid input:", x


Solo use for x in f: ... , esto le da línea tras línea, es mucho más corto y legible (en parte porque se detiene automáticamente cuando termina el archivo) y también le ahorra la llamada de rstrip porque la línea nueva final ya está cortada.

El error se debe a la condición de salida, que nunca puede ser cierta: incluso si el archivo está agotado, readline devolverá una cadena vacía, no None . También tenga en cuenta que todavía podría tener problemas con las líneas vacías, por ejemplo, al final del archivo. Agregar if line.strip() == "": continue hace que el código ignore las líneas en blanco, lo que probablemente sea bueno de todos modos.


with open(''test.txt'', ''r'') as inf, open(''test1.txt'', ''w'') as outf: for line in inf: line = line.strip() if line: try: outf.write(int(line, 16)) outf.write(''/n'') except ValueError: print("Could not parse ''{0}''".format(line))