Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Best Practice Question

38 views
Skip to first unread message

Anthony Correia

unread,
Feb 4, 2013, 11:23:49 PM2/4/13
to
Just started learning Python. I just wrote a simple copy files script. I use Powershell now as my main scripting language but I wanted to extend into the linux platform as well. Is this the best way to do it?

import os

objdir = ("C:\\temp2")
colDir = os.listdir(objdir)
for f in colDir:
activefile = os.path.join(objdir + "\\" + f)
print ("Removing " + activefile + " from " + objdir)
os.remove(activefile)

In Powershell I would do this:

$colDir = gci -path "c:\temp2"
$objDir = "C:\temp3"
ForEach($file in $colDir){
#.Fullname lists the directory and filename together. No need to do a join
#beforehand.
Copy-item $file.fullname -destination $objDir
}

Dave Angel

unread,
Feb 5, 2013, 6:52:23 AM2/5/13
to pytho...@python.org
You started two nearly-identical threads, with nearly the same content.
I won't repeat the comments already posted in the other thread, but
notice that your powershell script copies the file, while your Python
"translation" deletes the file. Big difference.

Next, you should use raw strings, or at least use the forward slash,
rather than double backslashes in file path literals.



--
DaveA

Jean-Michel Pichavant

unread,
Feb 5, 2013, 9:32:32 AM2/5/13
to Dave Angel, pytho...@python.org

He must have hit the send button too early by mistake.
By the way, did someone ever notice that r'\' fails ? I'm sure there's a reason for that... (python 2.5) Anyone knows ?

r'\'
SyntaxError: EOL while scanning single-quoted string

r'\b'
'\\b'


JM


-- IMPORTANT NOTICE:

The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

Albert Hopkins

unread,
Feb 5, 2013, 9:50:05 AM2/5/13
to pytho...@python.org

[...]
> By the way, did someone ever notice that r'\' fails ? I'm sure there's a
> reason for that... (python 2.5) Anyone knows ?
>
> r'\'
> SyntaxError: EOL while scanning single-quoted string
>
>
"Even in a raw string, string quotes can be escaped with a backslash,
but the backslash remains in the string; for example, r"\"" is a valid
string literal consisting of two characters: a backslash and a double
quote; r"\" is not a valid string literal (even a raw string cannot end
in an odd number of backslashes). Specifically, a raw string cannot end
in a single backslash (since the backslash would escape the following
quote character). " -- python docs

pytho...@tim.thechases.com

unread,
Feb 5, 2013, 10:17:54 AM2/5/13
to Jean-Michel Pichavant, pytho...@python.org
On Tue, 5 Feb 2013 15:32:32 +0100 (CET), Jean-Michel Pichavant wrote:
> By the way, did someone ever notice that r'\' fails ? I'm sure
> there's a reason for that... (python 2.5) Anyone knows ?
>
> r'\'
> SyntaxError: EOL while scanning single-quoted string

I hit this all the time with Vim's path-completion (":help
i_CTRL-X_CTRL-F") on Win32 which puts a trailing "\" on
directory-names. I just need to remember to remove it, a task made
easier because the syntax highlighting correctly shows how Python
interprets it (i.e., the string is still continued).

-tkc


Anthony Correia

unread,
Feb 5, 2013, 11:40:15 AM2/5/13
to Jean-Michel Pichavant, pytho...@python.org
Sorry about that I hit the touchpad on my laptop by mistake. Beside the using single '\' vs a double '\\' does that look ok?

Anthony Correia

unread,
Feb 5, 2013, 11:40:15 AM2/5/13
to comp.lan...@googlegroups.com, pytho...@python.org
On Tuesday, February 5, 2013 10:17:54 AM UTC-5, pytho...@tim.thechases.com wrote:

Joel Goldstick

unread,
Feb 5, 2013, 11:53:24 AM2/5/13
to Anthony Correia, pytho...@python.org
according to the docs for os.path.join, you don't need the backslash stuff at all.  Python knows the correct separator for your os and inserts it accordingling:
I'm on linux:

>>> import os
>>> p = os.path.join('bob', 'bill')
>>> p
'bob/bill'
>>>


--

Dave Angel

unread,
Feb 5, 2013, 1:10:59 PM2/5/13
to pytho...@python.org
On 02/05/2013 11:53 AM, Joel Goldstick wrote:
> On Tue, Feb 5, 2013 at 11:40 AM, Anthony Correia <akco...@gmail.com>wrote:
>
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
>
> according to the docs for os.path.join, you don't need the backslash stuff
> at all. Python knows the correct separator for your os and inserts it
> accordingling:
> I'm on linux:
>
>>>> import os
>>>> p = os.path.join('bob', 'bill')
>>>> p
> 'bob/bill'
>>>>
>

Worse than that, the code as posted by the OP used string concatenation
before calling os.path.join(), and the latter method does nothing at
all, when presented with a single string.



--
DaveA
0 new messages