Python

2016-07-14 26 views
9

yılında Perl __DATA__ eşdeğer Sık sık senaryonun sonunda dosya tanıtıcısına __DATA__ dan veri okumak perl'de kod yazarken:Python

while (<DATA>) { 
    chomp; 
    say; 
} 
__DATA__ 
line1 
line2 

ben bir dosyada okuma yerine bu hızlı test için kod vb bulmak, Bu, içeriğini anında düzenleyebileceğim anlamına geliyor. doc itibaren

:

__DATA__ belirteç derleme için Perl kodları tamamlandığında perl derleyici söyler.

Her şey __DATA__ belirteci sonra __DATA__ belirteç ulaşıldığında FOOBAR akım paketin adıdır dosya tanıtıcısına FOOBAR::DATA yoluyla okuma için kullanılabilir.

Python eşdeğer bir var mıdır? Değilse, benzer bir şey elde etmenin en iyi yolu Python-ish'ı önerebilir mi?

+1

açıklayabilir misiniz ne anlama aslında * yapar *, daha iyi Python usta bizler için Perl'den daha mı? – jonrsharpe

+0

@jonrsharpe: Bir modülün sonuna bir dosya gibi okunabilecek bir veriye veri eklemenizi sağlar. –

cevap

9

Hayır, Python direk karşılıkları yoktur. Bir çok satırlı değişken verilerinizi koyun: ayrı ayrı satırlara erişimi olmalıdır eğer

DATA = '''\ 
line1 
line2 
''' 

Ardından DATA.splitlines()v2/v3 kullanabilirsiniz. Sen de bunu bütün modül yüklendikten sonrasına kadar çağrılmaz bir işlev adını DATA kullanmak sağlanan Python dosyasının sonunda bu koyabilirsiniz.

Alternatif akım modülü açmak ve bu okunan:

with open(__file__.rstrip('co')) as data: 
    for line in data: 
     while line != '# __DATA__\n': 
      continue 
     # do something with the rest of the 'data' in the current source file. 

# ... 

# __DATA__ 
# This is going to be read later on. 

Ancak modülün kalanı hala en azından geçerli Python sözdizimi olması gerekir; Python ayrıştırıcısının belirli bir noktanın ötesinde ayrıştırmayı durdurması söylenemez.

Genel olarak, Python'da, kaynak dosyalarınıza numaralı veri dosyasını koydunuz ve bunu okuyacaksınız. Aynı yerde başka dosyaları yolu böylece 'cari dizin' ve üretmek için __file__ değişkeni kullanabilirsiniz:

import os.path 

current_dir = os.path.dirname(os.path.abspath(__file__)) 
with open(os.path.join(current_dir, 'data.txt')) as data: 
    # read from data.txt