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

前端 未结 5 1342
無奈伤痛
無奈伤痛 2020-11-28 10:15

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 look

相关标签:
5条回答
  • 2020-11-28 10:28

    Just as an FYI, here is my working code:

    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)
    

    Thanks again to everyone for all the great feedback!

    0 讨论(0)
  • 2020-11-28 10:30

    Um...

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

    Also, you never output to a new file.

    0 讨论(0)
  • 2020-11-28 10:34

    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)
    
    0 讨论(0)
  • 2020-11-28 10:36

    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.

    0 讨论(0)
  • 2020-11-28 10:40

    I got this error and fixed by appending the directory path in the loop. script not in the same directory as the files. dr1 ="~/test" directory variable

     fileop=open(dr1+"/"+fil,"r")
    
    0 讨论(0)
提交回复
热议问题