Error while using listdir in Python

后端 未结 8 840
小蘑菇
小蘑菇 2020-12-10 04:14

I\'m trying to get the list of files in a particular directory and count the number of files in the directory. I always get the following error:

WindowsError         


        
相关标签:
8条回答
  • 2020-12-10 05:09

    If you just want to see all the files in the directory where your script is located, you can use os.path.dirname(sys.argv[0]). This will give the path of the directory where your script is.

    Then, with fnmatch function you can obtain the list of files in that directory with a name and/or extension specified in the filenamevariable.

    import os,sys
    from fnmatch import fnmatch
    
    directory = os.path.dirname(sys.argv[0])    #this determines the directory
    file_name= "*"                              #if you want the python files only, change "*" to "*.py"
    
    for path, subdirs, files in os.walk(directory):
        for name in files:
            if fnmatch(name, file_name):
                print (os.path.join(path, name))
    

    I hope this helps.

    0 讨论(0)
  • 2020-12-10 05:16

    This error occurs when you use os.listdir on a path which does not refer to an existing path.
    For example:

    >>> os.listdir('Some directory does not exist')
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
    WindowsError: [Error 3] : 'Some directory does not exist/*.*'
    

    If you want to use os.listdir, you need to either guarantee the existence of the path that you would use, or use os.path.exists to check the existence first.

    if os.path.exists('/client_side/'):
        do something
    else:
        do something
    

    Suppose your current working directory is c:\foobar, os.listdir('/client_side/') is equivalent to os.listdir('c:/client_side'), while os.listdir('client_side/') is equivalent to os.listdir('c:/foobar/client_side'). If your client_side directory is not in the root, such error will occur when using os.listdir.

    For your 0 ouput problem, let us recall os.listdir(path)

    Return a list containing the names of the entries in the directory given by path. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory.

    and os.path.isfile(path).

    Return True if path is an existing regular file. This follows symbolic links, so both islink() and isfile() can be true for the same path.

    listdir returns neither the absolute paths nor relative paths, but a list of the name of your files, while isfile requires path. Therefore, all of those names would yield False.

    To obtain the path, we can either use os.path.join , concat two strings directly.

    print ([name for name in os.listdir(path)
            if os.path.isfile(os.path.join(path, name))])
    

    Or

    print ([name for name in os.listdir('client_side/')
            if os.path.isfile('client_side/' + name)])
    
    0 讨论(0)
提交回复
热议问题