是否有与Perl'相当的Python;数据文件句柄?

是否有与Perl'相当的Python;数据文件句柄?,python,perl,filehandle,Python,Perl,Filehandle,在Perl中,我经常从脚本末尾的文件句柄\uuuuu data\uuuuu读取数据: while (<DATA>) { chomp; say; } __DATA__ line1 line2 while(){ 咀嚼; 说,; } __资料__ 第1行 第2行 我发现测试代码等比读取文件更快,因为这意味着我可以动态编辑它的内容 从: \uuuu数据\uuuu标记告诉perl编译器 编译完成了 \uuuu数据\uuuu令牌之后的所有内容都可通过 filehandleF

在Perl中,我经常从脚本末尾的文件句柄
\uuuuu data\uuuuu
读取数据:

while (<DATA>) {
    chomp;
    say;
}
__DATA__
line1
line2 
while(){
咀嚼;
说,;
}
__资料__
第1行
第2行
我发现测试代码等比读取文件更快,因为这意味着我可以动态编辑它的内容

从:

\uuuu数据\uuuu
标记告诉perl编译器 编译完成了

\uuuu数据\uuuu
令牌之后的所有内容都可通过 filehandle
FOOBAR::DATA
,其中
FOOBAR
是当前 当到达
\uuuuu数据\uuuuuu
令牌时打包


Python中是否有一个等价物?如果没有,有人能提出实现类似目标的最具Python风格的方法吗

不,Python中没有直接的等价物。将数据放入多行变量中:

DATA = '''\
line1
line2
'''
如果必须访问单独的行,则可以使用
DATA.splitlines()
/。如果在整个模块加载后才调用的函数中只使用名称
DATA
,则可以将其放在Python文件的末尾

或者,打开当前模块并从中读取:

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.
但是,模块的其余部分至少必须是有效的Python语法;不能告诉Python解析器停止超过给定点的解析

一般来说,在Python中,您只需将数据文件放在源文件旁边并读取它。您可以使用
\uuuu file\uuuu
变量生成一个指向“当前目录”的路径,从而指向同一位置的任何其他文件:

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

您能解释一下,对于我们这些比Perl更精通Python的人来说,它实际上是做什么的吗?@jornsharpe:它允许您在模块末尾添加数据,然后可以像读取文件一样读取数据。