Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IOError: [Errno 2] No such file or directory trying to open a file

Tags:

I am very new to Python so please forgive the following basic code and problem, but I have been trying to figure out what is causing the error I am getting (I have even looked at similar threads on S.O.) but can't get past my issue.

Here is what I am trying to do:

  • loop through a folder of CSV files
  • search for a 'keyword' and delete all lines containing the 'keyword'
  • save output to a separate folder

Here is my code:

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) 

Here is the error I am getting:

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

I have confirmed that the folder and file do exist. What is causing the IOError and how to I resolve it? Also, is there anything else wrong with my code that would prevent me from performing the entire task?

like image 423
Keith Avatar asked Mar 19 '12 05:03

Keith


People also ask

Can't open file Errno 2 No such file or directory?

The error "FileNotFoundError: [Errno 2] No such file or directory" is telling you that there is no file of that name in the working directory. So, try using the exact, or absolute path. In the above code, all of the information needed to locate the file is contained in the path string - absolute path.

How do I fix error No such file or directory?

To solve No Such File Or Directory Error in Python, ensure that the file exists in your provided path. To check all the files in the directory, use the os. listdir() method.

How do you fix error number 2 in Python?

The Python FileNotFoundError: [Errno 2] No such file or directory error is often raised by the os library. This error tells you that you are trying to access a file or folder that does not exist. To fix this error, check that you are referring to the right file or folder in your program.


2 Answers

Hmm, there are a few things going wrong here.

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

You're not storing the result of join. This should be something like:

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

This open call is is the cause of your IOError. (Because without storing the result of the join above, f was still just 'file.csv', not 'src_dir/file.csv'.)

Also, the syntax:

with open(f):  

is close, but the syntax isn't quite right. It should be with open(file_name) as file_object:. Then, you use to the file_object to perform read or write operations.

And finally:

write(line) 

You told python what you wanted to write, but not where to write it. Write is a method on the file object. Try file_object.write(line).

Edit: You're also clobbering your input file. You probably want to open the output file and write lines to it as you're reading them in from the input file.

See: input / output in python.

like image 98
Seth Avatar answered Sep 18 '22 01:09

Seth


Even though @Ignacio gave you a straightforward solution, I thought I might add an answer that gives you some more details about the issues with your code...

# 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) 
like image 42
jdi Avatar answered Sep 21 '22 01:09

jdi