__file__ vs __FILE__

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • klenwell

    __file__ vs __FILE__

    I apologize in advance for coming at this from this angle but...

    In PHP you have the __FILE__ constant which gives you the value of the
    absolute path of the file you're in (as opposed to the main script
    file.) With the function dirname, this makes it easy to get the
    parent dir of a particular file from within that file:

    $parent_dir = dirname(__FILE_ _);

    I'm looking for the best way to accomplish this in Python. This seems
    to work:

    parent_dir = os.path.normpat h(os.path.join( os.path.abspath (__file__),
    '..'))

    Can anyone confirm the reliability of this method or suggest a better
    (one-line) method for accomplishing this?

    Thanks,
    Tom

  • Jeff McNeil

    #2
    Re: __file__ vs __FILE__

    The __file__ attribute is present when you run a script from a file.
    If you run from the interactive interpreter, it will raise a
    NameError. Likewise, I believe that in earlier versions of Python
    (2.1? Pre 2.2?) it was only set within imported modules. I've used the
    'os.path.realpa th(os.path.pard ir)' construct in a couple of scripts
    myself. That ought to work within the interactive interpreter.

    Jeff

    On Nov 2, 2007, at 11:21 PM, klenwell wrote:
    I apologize in advance for coming at this from this angle but...
    >
    In PHP you have the __FILE__ constant which gives you the value of the
    absolute path of the file you're in (as opposed to the main script
    file.) With the function dirname, this makes it easy to get the
    parent dir of a particular file from within that file:
    >
    $parent_dir = dirname(__FILE_ _);
    >
    I'm looking for the best way to accomplish this in Python. This seems
    to work:
    >
    parent_dir = os.path.normpat h(os.path.join( os.path.abspath (__file__),
    '..'))
    >
    Can anyone confirm the reliability of this method or suggest a better
    (one-line) method for accomplishing this?
    >
    Thanks,
    Tom
    >
    --
    http://mail.python.org/mailman/listinfo/python-list

    Comment

    • Bjoern Schliessmann

      #3
      Re: __file__ vs __FILE__

      Jeff McNeil wrote:
      I've used the 'os.path.realpa th(os.path.pard ir)' construct in a
      couple of scripts myself.
      In Windows? Using Linux, this gives me "..".

      I use os.path.dirname (os.path.abspat h(__file__))
      That ought to work within the interactive interpreter.
      Why do you also enter that code in the interpreter? If it is in a
      module, you should always be able to use __file__.

      Regards,


      Björn

      --
      BOFH excuse #238:

      You did wha... oh _dear_....

      Comment

      • Giampaolo Rodola'

        #4
        Re: __file__ vs __FILE__

        On 3 Nov, 04:21, klenwell <klenw...@gmail .comwrote:
        I apologize in advance for coming at this from this angle but...
        >
        In PHP you have the __FILE__ constant which gives you the value of the
        absolute path of the file you're in (as opposed to the main script
        file.) With the function dirname, this makes it easy to get the
        parent dir of a particular file from within that file:
        >
        $parent_dir = dirname(__FILE_ _);
        >
        I'm looking for the best way to accomplish this in Python. This seems
        to work:
        >
        parent_dir = os.path.normpat h(os.path.join( os.path.abspath (__file__),
        '..'))
        >
        Can anyone confirm the reliability of this method or suggest a better
        (one-line) method for accomplishing this?
        >
        Thanks,
        Tom
        This is not really 'one-line' since you have to import two modules
        first, but it looks nicer...:

        import sys, os
        print sys.argv[0] # absolute file name
        print os.path.dirname (sys.argv[0]) # absolute dir name

        Comment

        • Gabriel Genellina

          #5
          Re: __file__ vs __FILE__

          En Sat, 03 Nov 2007 10:07:10 -0300, Giampaolo Rodola' <gnewsg@gmail.c om>
          escribió:
          On 3 Nov, 04:21, klenwell <klenw...@gmail .comwrote:
          >In PHP you have the __FILE__ constant which gives you the value of the
          >absolute path of the file you're in (as opposed to the main script
          >file.)
          This is not really 'one-line' since you have to import two modules
          first, but it looks nicer...:
          >
          import sys, os
          print sys.argv[0] # absolute file name
          print os.path.dirname (sys.argv[0]) # absolute dir name
          Note that this returns the location of the *main* script, not the current
          module, as the OP explicitely asked for.

          --
          Gabriel Genellina

          Comment

          • Jeff McNeil

            #6
            Re: __file__ vs __FILE__

            I'm using Mac OS X, and it get:

            Python 2.5 (r25:51918, Sep 19 2006, 08:49:13)
            [GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
            Type "help", "copyright" , "credits" or "license" for more information.
            >>import os
            >>os.getcwd()
            '/Users/jeff'
            >>os.path.realp ath(os.path.par dir)
            '/Users'
            >>>
            The __file__ construct is fine from within a module and is probably
            more inline with what the OP was looking for anyways.

            On Nov 3, 2007, at 7:18 AM, Bjoern Schliessmann wrote:
            Jeff McNeil wrote:
            >
            >I've used the 'os.path.realpa th(os.path.pard ir)' construct in a
            >couple of scripts myself.
            >
            In Windows? Using Linux, this gives me "..".
            >
            I use os.path.dirname (os.path.abspat h(__file__))
            >
            >That ought to work within the interactive interpreter.
            >
            Why do you also enter that code in the interpreter? If it is in a
            module, you should always be able to use __file__.
            >
            Regards,
            >
            >
            Björn
            >
            --
            BOFH excuse #238:
            >
            You did wha... oh _dear_....
            >
            --
            http://mail.python.org/mailman/listinfo/python-list

            Comment

            • klenwell

              #7
              Re: __file__ vs __FILE__

              On Nov 3, 4:18 am, Bjoern Schliessmann <usenet-
              mail-0306.20.chr0n.. .@spamgourmet.c omwrote:
              Jeff McNeil wrote:
              I've used the 'os.path.realpa th(os.path.pard ir)' construct in a
              couple of scripts myself.
              >
              In Windows? Using Linux, this gives me "..".
              >
              I use os.path.dirname (os.path.abspat h(__file__))
              >
              That ought to work within the interactive interpreter.
              >
              Why do you also enter that code in the interpreter? If it is in a
              module, you should always be able to use __file__.
              >
              Regards,
              >
              Björn
              >
              --
              BOFH excuse #238:
              >
              You did wha... oh _dear_....
              I use os.path.dirname (os.path.abspat h(__file__))
              That makes sense, as it is almost a literal translation of what I'm
              used to using in PHP. Thanks for pointing this out.

              Comment

              • Bjoern Schliessmann

                #8
                Re: __file__ vs __FILE__

                klenwell wrote:
                Bjoern Schliessmann wrote:
                >I use os.path.dirname (os.path.abspat h(__file__))
                >
                That makes sense, as it is almost a literal translation of what
                I'm used to using in PHP. Thanks for pointing this out.
                You're welcome, happy coding :)

                Regards,


                Björn

                --
                BOFH excuse #286:

                Telecommunicati ons is downgrading.

                Comment

                • Giampaolo Rodola'

                  #9
                  Re: __file__ vs __FILE__

                  On 3 Nov, 15:46, "Gabriel Genellina" <gagsl-...@yahoo.com.a rwrote:
                  En Sat, 03 Nov 2007 10:07:10 -0300, Giampaolo Rodola' <gne...@gmail.c om
                  escribió:
                  >
                  On 3 Nov, 04:21, klenwell <klenw...@gmail .comwrote:
                  In PHP you have the __FILE__ constant which gives you the value of the
                  absolute path of the file you're in (as opposed to the main script
                  file.)
                  This is not really 'one-line' since you have to import two modules
                  first, but it looks nicer...:
                  >
                  import sys, os
                  print sys.argv[0] # absolute file name
                  print os.path.dirname (sys.argv[0]) # absolute dir name
                  >
                  Note that this returns the location of the *main* script, not the current
                  module, as the OP explicitely asked for.
                  >
                  --
                  Gabriel Genellina
                  Whoops! You're right.

                  Comment

                  • sandipm

                    #10
                    Re: __file__ vs __FILE__

                    interestingly.. .
                    I wanted to reuse this code so i wrote function in a file

                    def getParentDir():
                    import os
                    return os.path.dirname (os.path.abspat h(__file__))


                    and called this function, in another file, its giving me parent
                    directory of file where this function is defined.?
                    how to reuse this piece of code then? or am i doing something wrong?

                    btw using __path__[0], I can get the parent directory of file too...


                    sandip




                    On Nov 5, 5:09 am, Giampaolo Rodola' <gne...@gmail.c omwrote:
                    On 3 Nov, 15:46, "Gabriel Genellina" <gagsl-...@yahoo.com.a rwrote:
                    >
                    >
                    >
                    En Sat, 03 Nov 2007 10:07:10 -0300, Giampaolo Rodola' <gne...@gmail.c om
                    escribió:
                    >
                    On 3 Nov, 04:21, klenwell <klenw...@gmail .comwrote:
                    >In PHP you have the __FILE__ constant which gives you the value of the
                    >absolute path of the file you're in (as opposed to the main script
                    >file.)
                    This is not really 'one-line' since you have to import two modules
                    first, but it looks nicer...:
                    >
                    import sys, os
                    print sys.argv[0] # absolute file name
                    print os.path.dirname (sys.argv[0]) # absolute dir name
                    >
                    Note that this returns the location of the *main* script, not the current
                    module, as the OP explicitely asked for.
                    >
                    --
                    Gabriel Genellina
                    >
                    Whoops! You're right.

                    Comment

                    • Matimus

                      #11
                      Re: __file__ vs __FILE__

                      On Nov 5, 1:07 am, sandipm <sandip.m...@gm ail.comwrote:
                      interestingly.. .
                      I wanted to reuse this code so i wrote function in a file
                      >
                      def getParentDir():
                      import os
                      return os.path.dirname (os.path.abspat h(__file__))
                      >
                      and called this function, in another file, its giving me parent
                      directory of file where this function is defined.?
                      This is true. __file__ is defined at the module level where the
                      function is defined.
                      how to reuse this piece of code then? or am i doing something wrong?
                      >
                      You have a few choices. You could implement it wherever you need it
                      which might actually be nice from a OO point of view. You could modify
                      the function above to accept a parameter and operate on the __file__
                      attribute of that parameter. Or, you could use the inspect module to
                      look at the stack and operate on the __file__ attribute of the caller.

                      The first one is obvious to implement, although it will only apply to
                      modules you have implemented. The second one I think someone has
                      already posted a solution to. Here is how to implement the third one
                      (this is also usable with a parameter).

                      Code:
                      import inspect
                      import os
                      
                      def getpardir(obj=None):
                      if obj is None:
                      obj = inspect.stack()[1][0]
                      return os.path.dirname(inspect.getfile(obj))
                      Some may choose to stay away from this sort of thing though, since
                      inspecting the stack can tend to feel a bit like voo-doo. Passing a
                      parameter is probably your best bet IMHO.

                      Matt

                      Comment

                      Working...