假设我们想要实现PHP的等价物file_get_content
.
什么是最佳做法?(优雅可靠)
这是一些命题,它们是否正确?
使用with
声明:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
Run Code Online (Sandbox Code Playgroud)
使用标准open()
安全?
def file_get_contents(filename):
return open(filename).read()
Run Code Online (Sandbox Code Playgroud)
在任一解决方案中文件描述符会发生什么
什么可能产生以下行为?
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Run Code Online (Sandbox Code Playgroud)
但:
>>> print '%s' % msg
another message
Run Code Online (Sandbox Code Playgroud)
更多信息:
msg
对象是继承自的unicode
.__str__
/ __unicode__
/ __repr__
方法以返回字符串'my message'
.msg
对象是用字符串初始化的'another message'
.msg
测试之间的变量没有改变我想要一个与这个doctest匹配的解决方案,最小化(特别是在实际的继承周围):
>>> print '%s' % msg
my message
Run Code Online (Sandbox Code Playgroud)
谢谢你的所有建议.
我觉得这不会有更多帮助,但对于好奇的读者(和冒险的pythonist),这里是对象的实现:
class Message(zope.i18nmessageid.Message):
def __repr__(self):
return repr(zope.i18n.interpolate(self.default, self.mapping))
def __str__(self):
return zope.i18n.interpolate(self.default, self.mapping)
def __unicode__(self):
return zope.i18n.interpolate(self.default, self.mapping)
Run Code Online (Sandbox Code Playgroud)
这是我们创建对象msg的方式:
>>> msg = Message('another message', 'mydomain', …
Run Code Online (Sandbox Code Playgroud) 我正在使用git clone
Bash脚本,它接受任何类型的Git位置(HTTPS,Git,SSH,文件系统......)并将克隆它.但是此脚本必须在不与任何用户交互的情况下工作 更确切地说,我希望这个脚本不要暂停凭据:如果位置需要凭据,并且git无法单独找到它们,我希望Git失败.
我的脚本假设如果你没有设置正确的方法来访问没有密码的这些位置,那么这不是它的问题.但是,解决方案应该让方法知道故障是什么(例如,输出错误"Authentication Failed").
我需要这种行为只是因为它是一个脚本,它是非交互式运行的(cron作业,VM构建......等等).我需要它失败,不要冻结我的脚本等待我无法提供它的信息(并且不要).
因此,在我目前的担忧中,我要求git clone
失败而不是询问凭据.
我没有找到任何git clone
强制不要求凭证的选项,最好是在验证错误时失败.
我想利用docker镜像的缓存/分层来节省带宽,磁盘空间和花费的时间.
让我们说:
我应该如何在仅包含bugfix的最后一个图像上自动创建新的docker commit?
我的目标是只需要下载小的bugfix diff来获取已下载前一个图像的docker主机的新图像.
这是我目前关于它的反思:
docker commit
某种方式结束使用以保存图像中的更新.感谢您对如何实现这一目标的任何见解!
编辑:使用多个Dockerfile似乎是另一种方法,对于类似的问题,请访问http://jpetazzo.github.io/2013/12/01/docker-python-pip-requirements/.看来我需要动态生成dockerfiles.
使用Python模块re,如何获得等效的"\ w"(匹配字母数字字符)而不匹配数字字符(那些可以匹配"[0-9]")?
请注意,基本需要是匹配任何字符(包括所有unicode变体)而不使用数字字符(与"[0-9]"匹配).
作为最后一点,我真的需要一个正则表达式,因为它是更大的正则表达式的一部分.
下划线不应该匹配.
编辑:
我有一个自定义的pypi服务器运行,我想知道如何将所有对https://pypi.python.org/的引用从那里指向我的自定义服务器?
我希望能够覆盖用户呼叫pip
/ easy_install
包的情况(因此他们不必记得做-i
或者-f
)以及python setup.py install
使用setuptools install_requires
的人setup.py
.
是否有一些全局配置或设置我可以做所有这些不同的方法来查看我的本地服务器?我想做一些网络代理类型的魔术来路由http://pypi.python.org/
到我的自定义服务器将是一种方法,但不幸的是,这不是一个选项.
谢谢!
如果我们知道所有文件都将加载到内存中并且我们可以负担得起,那么在python变量中加载整个文件(可能是二进制文件)有什么缺点(如果有的话)或限制(如果有的话).如果这在技术上是可行的,那么应该避免这种情况,为什么?
关于文件大小问题,应该限制此解决方案的最大大小?为什么?
实际的加载代码可以是此stackoverflow条目中提出的代码.
示例代码是:
def file_get_contents(filename):
with open(filename) as f:
return f.read()
content = file_get_contents('/bin/kill')
... code manipulating 'content' ...
Run Code Online (Sandbox Code Playgroud)
[编辑]想到的代码操作(但可能不适用)是标准列表/字符串运算符(方括号,'+'符号)或一些字符串运算符('len','in'运算符,'count',' endswith'/'startswith','split','translation'...).
我正在使用org-mode.在文本周围使用"+",它在GUI中正确显示为删除文本(例如:+ striked-through +).
但是这在emacs控制台模式下不起作用,文本不会显示为striked-through:默认面没有区别.
我的术语知道如何显示透视效果,因为它通过此测试正确显示了标记文本:
echo -e "\e[9mtest\e[0m"
Run Code Online (Sandbox Code Playgroud)
所以这似乎是不使用SGR代码将文本呈现为删除线的emacs.
你知道告诉emacs在控制台中使用删除的方法吗?或者在我的结尾是不是设置了什么?
我有一个table
包含两列的表名foreign_table_name
,和foreign_key
.
是否可以编写一个SELECT
查询,该查询将JOIN
包含此表的值以及在列中指定名称的表foreign_table_name
?
例如,如果我们知道所有可能的目标外表有一个name
字段,我想知道我是否可以编写一些内容:
SELECT table.foo, table.bar, foreign_table.name
FROM table
JOIN $foreign_table AS foreign_table
ON (foreign_table.id = table.foreign_key
$foreign_table = table.foreign_table);
Run Code Online (Sandbox Code Playgroud)
任何使用PlpgSQL的解决方案当然都是可以接受的.
这是一个简单的内容:
Table ``table``
------------------------------------------------
| foo | bar | foreign_table_name | foreign_key |
------------------------------------------------
| A | 1 | fruits | 8 |
| B | 2 | vegetable | 5 |
------------------------------------------------
Table ``fruit``
---------------
| id | name |
---------------
| 8 | …
Run Code Online (Sandbox Code Playgroud) 在bash脚本中,如果特定位置是btrfs子卷,我怎么能优雅地检查?
我不想知道给定的位置是否在 btrfs文件系统(或子卷)中.我想知道给定的位置是否是子体积的头部.
理想情况下,解决方案可以用bash函数编写,所以我可以写:
if is_btrfs_subvolume $LOCATION; then
# ... stuff ...
fi
Run Code Online (Sandbox Code Playgroud)
"优雅"解决方案可读,代码小,资源消耗小.