【问题标题】:Converting the *.py script into a string将 *.py 脚本转换为字符串
【发布时间】:2016-05-13 11:41:54
【问题描述】:

我运行了一堆脚本,通常我将它们的结果存储在 MongoDB 中。为了确保我可以将结果与输入脚本链接起来,我将整个脚本存储为文本。使用以下代码片段在 Python 3 中运行良好:

    module = importlib.import_module(module)
    with open(module.__file__) as ff:
        source = ff.read()

在 Python 2 中应用相同的技巧会导致一团糟。最初,变量模块是一个字符串,例如 a.b.foo。不幸的是,我还不能废除 Python 2。

【问题讨论】:

  • “一团糟”到底是什么意思?它会抛出错误吗?结果与您的预期不同吗?也许这是一个编码错误?
  • 2.x 早期 Python 版本中可能不包含 with 语句

标签: python utf python-importlib


【解决方案1】:

在许多情况下,您不会获得带有 __file__ 的 *.py 文件,而是获得 *.pyc 文件。在你的情况下,这确实是一团糟。只需切断文件名的最后一个字符;)

import os
import importlib

#new_module = __import__("module")
new_module = importlib.import_module("module")

new_module_filename = os.path.realpath(new_module.__file__)
if new_module_filename.endswith(".pyc"):
    new_module_filename = new_module_filename[:-1]

with open(new_module_filename) as ff:
    source = ff.read()
print(source)

【讨论】:

  • 天哪,这有点骇人听闻。访问模块对象的“私有”成员,然后摆弄生成的字符串。它虽然有效:-) 谢谢
【解决方案2】:

你可以简单地做:

import sys
f= open(sys.argv[0])
content = f.read()
print content

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多