2011-07-13 12 views
47

Este código devuelve el mensaje de error:TypeError: coaccionar a Unicode: String necesidad o tampón

  • con abierto (infile, modo = 'r', buffering = -1) como in_f, abierto (archivosalida , modo = 'w', buffering = -1) como archivo_sal: TypeError: coaccionar a Unicode: cadena de necesidad o tampón, se encuentra el archivo

    # Opens each file to read/modify 
    infile=open('110331_HS1A_1_rtTA.result','r') 
    outfile=open('2.txt','w') 
    
    import re 
    
    with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f: 
        f = (i for i in in_f if i.rstrip()) 
        for line in f: 
         _, k = line.split('\t',1) 
         x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k) 
         if not x: 
          continue 
         out_f.write(' '.join(x[0]) + '\n') 
    

Por favor, que alguien me ayude.

Respuesta

53

¡Estás intentando abrir cada archivo dos veces! Primero haces:

infile=open('110331_HS1A_1_rtTA.result','r') 

y luego se pasa infile (que es un objeto de archivo) a la función open nuevo:

with open (infile, mode='r', buffering=-1) 

open es, por supuesto esperando su primer argumento a ser un nombre de archivo, ¡no es un archivo abierto!

Abre el archivo una sola vez y deberías estar bien.

+0

tan fantástico increíble. ¡Gracias! –

8

Está intentando pasar objetos de archivo como nombres de archivo. Intente utilizar

infile = '110331_HS1A_1_rtTA.result' 
outfile = '2.txt' 

en la parte superior de su código.

(no sólo el uso duplicado de open() causa ese problema con tratar de abrir el archivo de nuevo, esto también significa que infile y outfile no están cerrados durante el curso de la ejecución, aunque ellos probablemente se cierran una vez que el programa de finaliza)

5

Para el caso menos específico (no solo el código en la pregunta, ya que este es uno de los primeros resultados en Google para este mensaje de error genérico. Este error también se produce cuando se ejecuta cierto comando os con argumento None.

Por ejemplo:

os.path.exists(arg) 
os.stat(arg) 

Levantaremos esta excepción cuando arg es Ninguno.

+0

Gracias por esto. Ese código de error de Python es realmente engañoso. – mjuarez

Cuestiones relacionadas