Perl __DATA__ construct.

Discussion in 'Python' started by Mladen Gogala, Jun 25, 2012.

  1. I have a script in Perl that I need to rewrite to Python. The script
    contains __DATA__ at the end of the script, which enables Perl to access
    all the data after that through a file descriptor, like this:

    usage() if ( !$stat or !defined($home) or !defined($base) or !defined
    ($sid) );
    while (<DATA>) {
    s/%OB/$base/;
    if ( length($home) > 0 ) {
    s/%OH/$home/;
    }
    else {
    s/\/%OH$//;
    }
    if ( length($sid) > 0 && /%OS/ ) {
    s/%OS/$sid/;
    }
    elsif (/%OS/) {
    next;
    }
    s/%VR/$ver/;
    print;
    }
    __DATA__
    # .bashrc
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi
    set -a

    # User specific aliases and functions
    export PATH=/sbin:/bin:/usr/sbin:$PATH
    export EDITOR=vi
    export ORACLE_BASE=%OB
    export ORACLE_HOME=$ORACLE_BASE/product/%VR/%OH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/opt/odbc/lib:$ORACLE_HOME/lib32
    export CLASSPATH=/opt/java/lib/tools.jar:$ORACLE_HOME/jdbc/lib/
    ojdbc14.jar:.

    .......



    How do I do the same thing in Python? Alternatively, in Perl I can put an
    entire file into a string by using something like:

    $str=<<EOF
    This is all a single string,
    no matter how many lines do
    I put in it, but I do have to
    escape the special character
    EOF
    ;

    Is there a way to do the same thing in Python? The idea of the script is
    to generate $HOME/.bashrc for any automagically provisioned Oracle
    installation.

    --
    http://mgogala.byethost5.com
    Mladen Gogala, Jun 25, 2012
    #1
    1. Advertising

  2. On Mon, Jun 25, 2012 at 2:20 PM, Mladen Gogala <> wrote:
    > I have a script in Perl that I need to rewrite to Python. The script
    > contains __DATA__ at the end of the script, which enables Perl to access
    > all the data after that through a file descriptor, like this:
    >
    > usage() if ( !$stat or !defined($home) or !defined($base) or !defined
    > ($sid) );
    > while (<DATA>) {
    >    s/%OB/$base/;
    >    if ( length($home) > 0 ) {
    >        s/%OH/$home/;
    >    }
    >    else {
    >        s/\/%OH$//;
    >    }
    >    if ( length($sid) > 0 && /%OS/ ) {
    >        s/%OS/$sid/;
    >    }
    >    elsif (/%OS/) {
    >        next;
    >    }
    >    s/%VR/$ver/;
    >    print;
    > }
    > __DATA__
    > # .bashrc
    > # Source global definitions
    > if [ -f /etc/bashrc ]; then
    >        . /etc/bashrc
    > fi
    > set -a
    >
    > # User specific aliases and functions
    > export PATH=/sbin:/bin:/usr/sbin:$PATH
    > export EDITOR=vi
    > export ORACLE_BASE=%OB
    > export ORACLE_HOME=$ORACLE_BASE/product/%VR/%OH
    > export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/opt/odbc/lib:$ORACLE_HOME/lib32
    > export CLASSPATH=/opt/java/lib/tools.jar:$ORACLE_HOME/jdbc/lib/
    > ojdbc14.jar:.
    >
    > ......
    >
    >
    >
    > How do I do the same thing in Python? Alternatively, in Perl I can put an
    > entire file into a string by using something like:
    >
    > $str=<<EOF
    > This is all a single string,
    > no matter how many lines do
    > I put in it, but I do have to
    > escape the special character
    > EOF
    > ;
    >
    > Is there a way to do the same thing in Python? The idea of the script is
    > to generate $HOME/.bashrc for any automagically provisioned Oracle
    > installation.
    >

    either escape the new-line
    'hello \
    world'

    or use triple-quoted strings
    """hello
    world"""

    http://docs.python.org/tutorial/introduction.html#strings
    Benjamin Kaplan, Jun 25, 2012
    #2
    1. Advertising

  3. Mladen Gogala

    Miki Tebeka Guest

    > Is there a way to do the same thing in Python?
    Not without some clever tricks. Either you store data at the beginning of the file or you have another file with the data.

    If you really need one file and data at the end, you can roll your own. Something like:
    def data():
    with open(__file__) as fo:
    for line in fo:
    if line.startswith('# __data__'):
    return ''.join(line[2:] for line in fo)

    def main():
    print(data())


    if __name__ == '__main__':
    main()

    # __data__
    # blah
    # blah
    # blah
    Miki Tebeka, Jun 25, 2012
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mukesh
    Replies:
    4
    Views:
    605
    Paul N
    Mar 26, 2010
  2. Vince Forgetta

    embedded code construct a la perl

    Vince Forgetta, Apr 13, 2004, in forum: Ruby
    Replies:
    4
    Views:
    116
    Vince Forgetta
    Apr 14, 2004
  3. botp
    Replies:
    0
    Views:
    102
  4. Chris Marshall

    seek and __DATA__ not behaving how I would hope

    Chris Marshall, May 17, 2005, in forum: Perl Misc
    Replies:
    8
    Views:
    119
    Tad McClellan
    Jun 4, 2005
  5. -did-not-set--mail-host-address

    HTML::TokeParser; __DATA__ as a filehandle

    -did-not-set--mail-host-address, Oct 24, 2006, in forum: Perl Misc
    Replies:
    2
    Views:
    122
    Brian Wilkins
    Oct 24, 2006
Loading...

Share This Page