IOError: No existe tal archivo o directorio que intenta abrir un archivo

Soy muy nuevo en Python, así que perdone el siguiente código y problema básicos, pero he estado tratando de averiguar qué está causando el error que estoy recibiendo (incluso he visto temas similares en SO) pero no puedo superar mi problema.

Esto es lo que estoy tratando de hacer:

  • recorrer una carpeta de archivos CSV
  • busque una ‘palabra clave’ y elimine todas las líneas que contengan la ‘palabra clave’
  • guardar la salida en una carpeta separada

Aquí está mi código:

import os, fnmatch import shutil src_dir = "C:/temp/CSV" target_dir = "C:/temp/output2" keyword = "KEYWORD" for f in os.listdir(src_dir): os.path.join(src_dir, f) with open(f): for line in f: if keyword not in line: write(line) shutil.copy2(os.path.join(src_dir, f), target_dir) 

Aquí está el error que estoy recibiendo:

 IOError: [Errno 2] No such file or directory: 'POS_03217_20120309_153244.csv' 

He confirmado que la carpeta y el archivo existen. ¿Qué está causando el IOError y cómo resolverlo? Además, ¿hay algún otro problema con mi código que me impida realizar toda la tarea?

Related of "IOError: No existe tal archivo o directorio que intenta abrir un archivo"

Hmm, hay algunas cosas que van mal aquí.

 for f in os.listdir(src_dir): os.path.join(src_dir, f) 

No estás almacenando el resultado de join . Esto debería ser algo como:

 for f in os.listdir(src_dir): f = os.path.join(src_dir, f) 

Esta llamada abierta es la causa de su IOError . (Debido a que sin almacenar el resultado de la join anterior, f seguía siendo solo ‘file.csv’, no ‘src_dir / file.csv’.)

Además, la syntax:

 with open(f): 

Está cerca, pero la syntax no es del todo correcta. Debe ser with open(file_name) as file_object: Luego, utiliza el file_object para realizar operaciones de lectura o escritura.

Y finalmente:

 write(line) 

Le dijiste a Python lo que querías escribir, pero no dónde escribirlo. Escribir es un método en el objeto de archivo. Intente file_object.write(line) .

Editar : También estás golpeando tu archivo de entrada. Es probable que desee open el archivo de salida y escribir líneas en él a medida que las esté leyendo desde el archivo de entrada.

Ver: entrada / salida en python .

Aunque @Ignacio te dio una solución directa, pensé que podría agregar una respuesta que te proporcione más detalles sobre los problemas con tu código …

 # You are not saving this result into a variable to reuse os.path.join(src_dir, f) # Should be src_path = os.path.join(src_dir, f) # you open the file but you dont again use a variable to reference with open(f) # should be with open(src_path) as fh # this is actually just looping over each character # in each result of your os.listdir for line in f # you should loop over lines in the open file handle for line in fh # write? Is this a method you wrote because its not a python builtin function write(line) # write to the file fh.write(line) 

Um …

 with open(os.path.join(src_dir, f)) as fin: for line in fin: 

Además, nunca se imprime en un archivo nuevo.

Así como un FYI, aquí está mi código de trabajo:

 src_dir = "C:\\temp\\CSV\\" target_dir = "C:\\temp\\output2\\" keyword = "KEYWORD" for f in os.listdir(src_dir): file_name = os.path.join(src_dir, f) out_file = os.path.join(target_dir, f) with open(file_name, "r+") as fi, open(out_file, "w") as fo: for line in fi: if keyword not in line: fo.write(line) 

Gracias de nuevo a todos por todos los buenos comentarios!

Obtuve este error y lo solucioné agregando la ruta del directorio en el bucle. script no en el mismo directorio que los archivos. dr1 = variable de directorio “~ / test”

  fileop=open(dr1+"/"+fil,"r")