How to get the filename without the extension from a path in Python?

前端 未结 23 1500
逝去的感伤
逝去的感伤 2020-11-22 05:43

How to get the filename without the extension from a path in Python?

For instance, if I had "/path/to/some/file.txt", I would want "

相关标签:
23条回答
  • 2020-11-22 06:34

    But even when I import os, I am not able to call it path.basename. Is it possible to call it as directly as basename?

    import os, and then use os.path.basename

    importing os doesn't mean you can use os.foo without referring to os.

    0 讨论(0)
  • 2020-11-22 06:34

    The other methods don't remove multiple extensions. Some also have problems with filenames that don't have extensions. This snippet deals with both instances and works in both Python 2 and 3. It grabs the basename from the path, splits the value on dots, and returns the first one which is the initial part of the filename.

    import os
    
    def get_filename_without_extension(file_path):
        file_basename = os.path.basename(file_path)
        filename_without_extension = file_basename.split('.')[0]
        return filename_without_extension
    

    Here's a set of examples to run:

    example_paths = [
        "FileName", 
        "./FileName",
        "../../FileName",
        "FileName.txt", 
        "./FileName.txt.zip.asc",
        "/path/to/some/FileName",
        "/path/to/some/FileName.txt",
        "/path/to/some/FileName.txt.zip.asc"
    ]
    
    for example_path in example_paths:
        print(get_filename_without_extension(example_path))
    

    In every case, the value printed is:

    FileName
    
    0 讨论(0)
  • 2020-11-22 06:36

    Very very very simpely no other modules !!!

    import os
    p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
    
    # Get the filename only from the initial file path.
    filename = os.path.basename(p)
    
    # Use splitext() to get filename and extension separately.
    (file, ext) = os.path.splitext(filename)
    
    # Print outcome.
    print("Filename without extension =", file)
    print("Extension =", ext)
    
    0 讨论(0)
  • 2020-11-22 06:37

    A multiple extension aware procedure. Works for str and unicode paths. Works in Python 2 and 3.

    import os
    
    def file_base_name(file_name):
        if '.' in file_name:
            separator_index = file_name.index('.')
            base_name = file_name[:separator_index]
            return base_name
        else:
            return file_name
    
    def path_base_name(path):
        file_name = os.path.basename(path)
        return file_base_name(file_name)
    

    Behavior:

    >>> path_base_name('file')
    'file'
    >>> path_base_name(u'file')
    u'file'
    >>> path_base_name('file.txt')
    'file'
    >>> path_base_name(u'file.txt')
    u'file'
    >>> path_base_name('file.tar.gz')
    'file'
    >>> path_base_name('file.a.b.c.d.e.f.g')
    'file'
    >>> path_base_name('relative/path/file.ext')
    'file'
    >>> path_base_name('/absolute/path/file.ext')
    'file'
    >>> path_base_name('Relative\\Windows\\Path\\file.txt')
    'file'
    >>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
    'file'
    >>> path_base_name('/path with spaces/file.ext')
    'file'
    >>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
    'file'
    >>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
    'file name with spaces'
    
    0 讨论(0)
  • 2020-11-22 06:38

    Thought I would throw in a variation to the use of the os.path.splitext without the need to use array indexing.

    The function always returns a (root, ext) pair so it is safe to use:

    root, ext = os.path.splitext(path)

    Example:

    >>> import os
    >>> path = 'my_text_file.txt'
    >>> root, ext = os.path.splitext(path)
    >>> root
    'my_text_file'
    >>> ext
    '.txt'
    
    0 讨论(0)
  • 2020-11-22 06:41

    For convenience, a simple function wrapping the two methods from os.path :

    def filename(path):
      """Return file name without extension from path.
    
      See https://docs.python.org/3/library/os.path.html
      """
      import os.path
      b = os.path.split(path)[1]  # path, *filename*
      f = os.path.splitext(b)[0]  # *file*, ext
      #print(path, b, f)
      return f
    

    Tested with Python 3.5.

    0 讨论(0)
提交回复
热议问题