- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 python 模块,其中包含需要在运行时加载的各种数据文件(一组表示曲线的 csv 文件)。 csv 模块运行良好
# curvefile = "ntc.10k.csv"
raw = csv.reader(open(curvefile, 'rb'), delimiter=',')
但是如果我将此模块导入到另一个脚本中,我需要找到数据文件的完整路径。
/project
/shared
curve.py
ntc.10k.csv
ntc.2k5.csv
/apps
script.py
我希望 script.py 仅通过基本文件名引用曲线,而不是完整路径。在模块代码中,我可以使用:
pkgutil.get_data("curve", "ntc.10k.csv")
它非常适合查找文件,但它返回已读入的 csv 文件,而 csv.reader 需要文件句柄本身。有什么办法可以让这两个模块很好地协同工作吗?它们都是标准的库模块,所以我并没有真正预料到会出现问题。我知道我可以开始拆分 pkgutil 二进制文件数据,但我可能不使用 csv 库。
我知道我可以在模块代码中使用它,而忘记 pkgutils,但看起来 pkgutils 确实正是它的用途。
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, curvefile)
raw = csv.reader(open(DATA_PATH, "rb"))
最佳答案
我打开了get_data
的源代码,让它返回文件的路径而不是加载的文件是很简单的。这个模块应该可以解决问题。使用关键字 as_string=True
返回读入内存的文件,或使用 as_string=False
返回路径。
import os, sys
from pkgutil import get_loader
def get_data_smart(package, resource, as_string=True):
"""Rewrite of pkgutil.get_data() that actually lets the user determine if data should
be returned read into memory (aka as_string=True) or just return the file path.
"""
loader = get_loader(package)
if loader is None or not hasattr(loader, 'get_data'):
return None
mod = sys.modules.get(package) or loader.load_module(package)
if mod is None or not hasattr(mod, '__file__'):
return None
# Modify the resource name to be compatible with the loader.get_data
# signature - an os.path format "filename" starting with the dirname of
# the package's __file__
parts = resource.split('/')
parts.insert(0, os.path.dirname(mod.__file__))
resource_name = os.path.join(*parts)
if as_string:
return loader.get_data(resource_name)
else:
return resource_name
关于python - 如何在 python 中将 pkgutils.get_data 与 csv.reader 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003755/
我有一个包布局: scenarios/ __init__.py X/ __init__.py Y/ __init__.py
显然,导入RichIPythonWidget会对模块pkgutil产生影响。 测试环境: IPython版本:2.1.0python 版本:2.7 和 2.7.6 显示问题的代码: import os
我正在尝试打印包中给定模块的所有子模块。但是,当运行该函数来执行此操作时,我得到的结果很复杂,任何人都可以解释为什么会发生这种情况以及如何避免它吗? 项目布局: /Users/me/projects/
我可以在不先解压缩的情况下找到压缩包中的模块吗? 我正在使用 pkgutil.walk_packages 检查包裹并使用 importlib 拉出所有模块. for _, pkg, _ in pkgu
所以我正在编写一些代码,需要从 CSV 文件中提取配置/数据,这些文件与应用程序打包在一起。据我了解,使用 pkgutil 是执行此操作的“正确”方法。所以我想做的是: import pkgutil
PEP420 使 __init__.py 文件可选:https://docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-namespace-pac
我有一个 python 模块,其中包含需要在运行时加载的各种数据文件(一组表示曲线的 csv 文件)。 csv 模块运行良好 # curvefile = "ntc.10k.csv" raw =
我是一名优秀的程序员,十分优秀!