Creating a function for a directory

Rick Johnson rantingrickjohnson at gmail.com
Tue Nov 12 06:42:19 CET 2013


On Monday, November 11, 2013 5:11:52 PM UTC-6, Chris Angelico wrote:
> On Tue, Nov 12, 2013 at 9:51 AM, Rick Johnson
> > 1. i believe win32 file paths require a qualifying volume
> > letter.
> They do not; omitting the drive letter makes the path relative to the
> current drive (and since it doesn't start with a directory specifier,
> the current directory).

Hmm. Let's confirm:

    >>> import os
    >>> os.path.exists("C:/Windows/System32")
    True
    >>> os.path.exists("/Windows/System32")
    True

Yep, it's official. "Implicit File Path Resolution"
I need to author a PyWart on this soon!

> > 2. Never, ever, *EVER* write data to disc before confirming
> > the paths your passing are pointing to the location you
> > intended to write the data. Use os.path.exists(path) to test
> > your paths BEFORE trying to write data.
> Why? Why, oh why? If there's a problem, it'll be signalled
> with an exception.

Except when there's a problem that won't be signaled by an
EXCEPTION, but will be signaled by EMOTIONS; like for
instance removing the wrong directory or truncating the
wrong file because of a typo in your source code.

 OPPS! :-'(

> Testing that the path exists opens you up to race
> problems, so you won't see anything now, but some day your
> code will be in a concurrent situation and you'll get
> unexpected exceptions. Why not just expect the exception?

Because today i'm not facing a concurrent situation, so i'm
not going to bother and protect from it. Just like i'm not
facing a snake bite, so i won't bother to lug around a vial
of antidote. Your attempts to discredit me via hypothetical
scenarios is entertaining however.

> This one's arguable. How often do you use the 'file'
> builtin? I've worked with files in Python innumerable
> times, and I don't remember the last time I used 'file'.
> Yes, avoid shadowing important builtins like 'list' and
> 'int', but 'id' and 'file' aren't that big a deal.

My first concern is with the OP adopting "self documenting"
names. Shadowing file is merely ensuring that the OP knows
"file" is a builtin. Shadowing any builtin can create very
difficult bugs to track. This is the point the OP should
remember.

> They won't float around forever. The garbage collector
> will get to them.

That depends on how they are stored. You make too many
assumptions Chris. I don't have an problems with GC's, but
i'm not about to write sloppy code and "assume" the GC is
going to swoop in and save me like a feline trapped in a 
tree.

> > 5. Remember, you cannot write a file into a directory that
> > does not exist.
> So? Exception thrown, traceback printed to console,
> process terminated cleanly. I'm not seeing a problem here.

Now you're just trolling!

    def firstdev(file):
        in_file = open("desktop/%s.txt") % file
        indata = in_file.read()
        out_file = open("desktop/newfolder/%s.txt", 'w') % file

Just from reading that code NO ONE could know for sure if
"newfolder" even existed BEFORE the OP tried to open the
"out_file". Maybe the OP thinks that missing sub-directories
are auto-created by the open function, but there's no way to
know for sure, hence my comment.

> > 6 For OS compatibility always use os.path.join() to join
> > path parts into a whole. This method will insert the proper
> > separator for you depending on the OS.
> Technically true. However, most modern OSes will accept a
> slash. There'll be a few situations where that's not true,
> but the OP an happily just use slashes for simplicity.

Many a developer have lived to regret those words.

PS: I thought Steven was the official "devils advocate"
around here? Hmm. I guess everyone needs a day off.




More information about the Python-list mailing list