472,127 Members | 2,000 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,127 software developers and data experts.

Perl-Python-a-Day: split a file full path

Split File Fullpath Into Parts

Xah Lee, 20051016

Often, we are given a file fullpath and we need to split it into the
directory name and file name. The file name is often split into a core
part and a extension part. For example:

'/Users/t/web/perl-python/I_Love_You.html'
becomes

'/Users/t/web/perl-python/' (directory name)
'I_Love_You' (file's base name)
'.html' (file's “extension”)
Depending on the language, some language will remove the trailing slash
after the dir name, and some will omit the dot before the suffix.

In Python, to split a full path into parts is done with the os.path
module. Example:

# python
import os.path

myPath = '/Users/t/web/perl-python/I_Love_You.html'
(dirName, fileName) = os.path.split(myPath)
(fileBaseName, fileExtension)=os.path.splitext(fileName)

print dirName # /Users/t/web/perl-python
print fileName # I_Love_You.html
print fileBaseName # I_Love_You
print fileExtension # .html
The official doc of the os.path module is at:
http://www.python.org/doc/2.4.1/lib/module-os.path.html

In Perl, spliting a full path into parts is done like this:

# perl
use File::Basename;

$myPath = '/Users/t/web/perl-python/I_Love_You.html';

($fileBaseName, $dirName, $fileExtension) = fileparse($myPath,
('\.html') );

print $fileBaseName, "\n"; # I_Love_You
print $dirName, "\n"; # /Users/t/web/perl-python/
print $fileExtension, "\n"; # .html
Note: the second argument to fileparse() is a list of regex. In
particular, you need to escape the dot.

For the official doc, type in command line: “perldoc File::Path”.
------
This post is archived at
http://xahlee.org/perl-python/split_fullpath.html

Schemers, a scsh version will be appreciated.

Xah
xa*@xahlee.org
http://xahlee.org/

Oct 17 '05 #1
3 12236
Xah Lee:
In Perl, spliting a full path into parts is done like this:


And then follows Perl-code that only works with an optional .html
"extension",
which is similar to the code in the File::Basename description.
http://www.perl.com/doc/manual/html/.../Basename.html
It is best practice to derive and store the normalized (or absolute)
path, because relative paths can get loose so will get loose.
Consider this:

$myPath = './example/basename.ext';
and this:

$myPath = './example/filename.1.23.45-beta';
and this:

$myPath = 'x:.\example\basename.ext';
(some platforms have a wd per device)
--
Affijn, Ruud

"Gewoon is een tijger."

Oct 17 '05 #2
Hello, I'm a cs student from Milano (Italy).
I don't use scsh fequently but this should work:

(open srfi-11 ;let-values
srfi-28) ;format

(define my-path "/Users/t/web/perl-python/I_Love_You.html")

(let-values (((dir-name
file-base-name
file-extension) (parse-file-name my-path)))

(format "~a~%" dir-name) ;/Users/t/web/perl-python/
(format "~a~%" file-base-name) ;I_Love_You
(format "~a~%" file-extension)) ;.html

You can find more useful function here (scsh reference manual):
http://www.scsh.net/docu/html/man-Z-...l#node_sec_5.1

matteo

Oct 17 '05 #3
Xah Lee wrote:
In Perl, spliting a full path into parts is done like this:

Dr.Ruud wrote: And then follows Perl-code that only works with an optional .html
"extension",


Thanks for the note. I've corrected it here:
http://xahlee.org/perl-python/split_fullpath.html

namely:
Note: the second argument to fileparse() is a list of regex. In
particular, you need to escape the dot. Normally, one gives it a value
such as ('\.html', '\.HTML', '\.jpg', '\.JPG'). Yes, it is case
sensitive. If you want to match any extension (that is, the string
after the last dot), use ('\.[^.]+$').

Xah
xa*@xahlee.org
http://xahlee.org/

Oct 17 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by Benjamin Han | last post: by
5 posts views Thread by Smarty | last post: by
11 posts views Thread by rh00667 | last post: by
4 posts views Thread by Michel Rouzic | last post: by
2 posts views Thread by =?Utf-8?B?U2hhbQ==?= | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.