Perl __DATA__ construct.


M

Mladen Gogala

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.
 
Ad

Advertisements

B

Benjamin Kaplan

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
 
Ad

Advertisements

M

Miki Tebeka

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top