小编the*_*orn的帖子

我应该如何在Python中逐行读取文件?

在史前时期(Python 1.4),我们做到了:

fp = open('filename.txt')
while 1:
    line = fp.readline()
    if not line:
        break
    print line
Run Code Online (Sandbox Code Playgroud)

在Python 2.1之后,我们做了:

for line in open('filename.txt').xreadlines():
    print line
Run Code Online (Sandbox Code Playgroud)

在我们在Python 2.3中获得方便的迭代器协议之前,可以做到:

for line in open('filename.txt'):
    print line
Run Code Online (Sandbox Code Playgroud)

我见过一些使用更详细的例子:

with open('filename.txt') as fp:
    for line in fp:
        print line
Run Code Online (Sandbox Code Playgroud)

这是前进的首选方法吗?

[编辑]我得到了with语句确保关闭文件...但为什么不包含在文件对象的迭代器协议中?

python python-2.7 python-3.x

132
推荐指数
3
解决办法
32万
查看次数

Windows上的全局npm安装位置?

我不是百分百肯定,但我相信我在家用和办公室PC上安装了Windows安装程序的v5节点.

在我的家用电脑上,全局安装发生在%APPDATA%下:

(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd
Run Code Online (Sandbox Code Playgroud)

在我的办公室电脑上,他们在程序文件下:

(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd
Run Code Online (Sandbox Code Playgroud)

我需要向PyCharm的文件监视器提供许多这些全局工具的完整路径,并且由于我共享它的项目文件,因此在用户文件夹下没有全局资源是有意义的.

为什么全局安装最终会出现在不同的文件夹中,如何强制它们到达所有团队成员共有的位置?

windows node.js pycharm npm

54
推荐指数
4
解决办法
8万
查看次数

防止私有和基于 pypi 的 Python 包之间的命名空间冲突

我们有 100 多个私有包,到目前为止我们一直在使用 s3pypi 在 s3 存储桶中设置私有 pypi。我们的私有包相互依赖(以及公共包),并且(当然)我们的 GitLab 管道找到它所依赖的包的最新功能版本是很重要的。即我们对最新签入的代码不感兴趣。我们仅在测试之后创建新轮子,并且 qa 已经运行到 master 的推送(这是解释-e <vcs>需求不起作用的冗长方式)。

我们的设置非常有效,直到有人在官方 pypi 上创建了一个新的公共包,该包隐藏了我们的包名称之一。我们可以通过增加版本号来强制选择我们的私有包,使其高于 pypi.org 上的新包 - 或者通过将我们的包重命名为尚未在 pypi.org 上使用的内容。

这显然是一个笨拙和脆弱的解决方案,但显然功能是这样设计的

在初始存储桶设置后 s3pypi 不需要维护或管理。上面的票建议使用devpi但这似乎是一个非常繁重的解决方案,需要管理/监控/等。

GitLab 的 pypi 解决方案似乎处于单个包级别(这意味着我们必须列出多达 100 个以上的 url——每个包一个)。这似乎不切实际,但也许我不明白一些东西(我也可以看到我们组下的包注册表菜单,但文档指向“package-pypi”文档)。

我们不可能是第一个遇到这个问题的小公司..?有没有比在 pypi.org 上注册我们所有包的虚拟版本更好的方法(版本 = 0.0.1,所以 s3pypi 版本将是首选)?

python pypi

29
推荐指数
1
解决办法
2247
查看次数

如何避免HTML1500使用嵌入式svg时,IE中的标签无法自动关闭警告?

使用我认为非常标准的嵌入式svg:

<!DOCTYPE html>
<html>
<body style="padding:50px">

  <svg width="100" height="100">
    <circle cx="50" cy="50" r="20" />
  </svg>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

IE(11)给我一个警告"HTML1500:标签不能自动关闭.使用明确的结束标签." (DevTools,Console选项卡).

确实,如果我<circle..改为:

<circle cx="50" cy="50" r="20"></circle>
Run Code Online (Sandbox Code Playgroud)

警告消失了,但这对我来说很奇怪..

IE devtools偶尔会发现真正的非闭合标记错误,因此看到它从这种噪声中变得无用时会很难过.

有没有办法让IE变得快乐,而不是在各处添加结束标签?

更新:请注意,问题是关于"外国元素",而不是"虚空元素"(http://www.w3.org/html/wg/drafts/html/master/single-page.html#elements-2).<svg>不是自我关闭的(它被定义为属于Container元素类别:http://www.w3.org/TR/SVG/struct.html#SVGElement).

<circle..被定义为基本形状元素(http://www.w3.org/TR/SVG/shapes.html#CircleElement),这意味着它是自动关闭的.在阅读html5规范的8.1.2时:

其开始标记被标记为自闭的外来元素不能包含任何内容(因为没有结束标记,因此不能在开始标记和结束标记之间放置内容).其开始标记未标记为自闭合的外部元素可以包含文本,字符引用,CDATA部分,其他元素和注释,但文本不得包含字符U + 003C LESS-THAN SIGN(<)或不明确的&符号.

看来(我)像它说的内部标签<svg>元素(即外来元素)是自动关闭,如果SVG规格的说,他们是和定义的开始标记(8.1.2.1)时,#6说,/<tagname ... />是可选的,例如<br/>,但不是<circle ../>:

然后,如果元素是void元素之一,或者如果元素是外来元素,则可能存在单个U + 002F SOLIDUS字符(/).此字符对void元素没有影响,但在外部元素上,它将开始标记标记为自动关闭.

所以我认为该文件符合原样.我不确定使用结束</circle>标签是否符合要求.

html5 internet-explorer svg

27
推荐指数
1
解决办法
1万
查看次数

在函数内部使用exec设置变量

我刚开始自学Python,我需要一些关于这个脚本的帮助:

old_string = "didnt work"   
new_string = "worked"

def function():
    exec("old_string = new_string")     
    print(old_string) 

function()
Run Code Online (Sandbox Code Playgroud)

我想得到它old_string = "worked".

python string variables function exec

21
推荐指数
2
解决办法
1万
查看次数

如何在第一个文档字符串中断链接以满足pep8?

我正在使用Sphinxdoc生成api文档,并且在编写docstring时遇到了pep8一致性问题.

如下所示,OWASP站点的链接在第105列结束,远远超过pep8规定的最大行长度

def handle_csrf(...):
    """The general recommendation by people in the know [OWASP]_, is
       'to implement the Synchronizer Token Pattern (STP_)'.

       .. [OWASP] The Open Web Application Security Project
          (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)
       .. _STP: http://www.corej2eepatterns.com/Design/PresoDesign.htm

    """
Run Code Online (Sandbox Code Playgroud)

有没有办法包装网址,同时仍然保持生成的文档中的URL?

插入反斜杠不起作用.

python restructuredtext pep8 python-sphinx

20
推荐指数
2
解决办法
3540
查看次数

如何在scss中实现可切换主题?

我有一个现有项目,其中包含一个使用语义变量的 scss 文件:

$background-color: white;

body {
    background-color: $background-color;
}
Run Code Online (Sandbox Code Playgroud)

当我向正文添加主题类时,我想将背景更改为黑色:

<body class="theme-dark">...</body>
Run Code Online (Sandbox Code Playgroud)

如果我删除课程(或切换到主题灯),则返回白色。

我还没有找到任何轻量级的方法来在 scss 中执行此操作(为每个主题参数化一个类似乎是一种非常难以维护的方法)。

我找到了一个混合 scss/css-自定义属性解决方案:

原来的:

.theme-light {
    --background-color: white;
}
Run Code Online (Sandbox Code Playgroud)

更新(基于阿马尔的回答):

:root {
    --background-color: white;
}
.theme-dark {
    --background-color: black;
}

$background-color: var(--background-color);
body {
    background-color: $background-color;
}
Run Code Online (Sandbox Code Playgroud)

将 scss 变量定义为具有 css 变量扩展作为值,即(从上面):

$background-color: var(--background-color);
Run Code Online (Sandbox Code Playgroud)

生成以下 css:

:root { --background-color: white; }
.theme-dark { --background-color: black; }
body { background-color: var(--background-color); }
Run Code Online (Sandbox Code Playgroud)

这似乎就是我们想要的......?

我喜欢它,因为它只需要更改$background-color(不是非常大的 scss 文件中的每个用法)的定义,但我不确定这是否是一个合理的解决方案?我对 scss 还很陌生,所以也许我错过了一些功能..?

css sass

17
推荐指数
2
解决办法
2万
查看次数

有没有官方方法来获取模型的管理选项?

我需要访问search_fields模型的管理选项上定义的属性.很久以前,它非常简单直接(但没有记录),即model._meta.admin.search_fields.

到达管理员是困难的部分,我能得到的最接近的是:

def admin_options(model):
    from django.contrib import admin
    return admin.site._registry.get(model)
Run Code Online (Sandbox Code Playgroud)

我找不到记录的._registry成员(并且下划线似乎暗示它不公开).这对于未运行的站点也不起作用admin.autodiscover().后备代码执行此操作:

try:
    appname = model.__module__.split('.models')[0]
    admin_module = appname + '.admin'
    __import__(admin_module)  # registers admin option classes with AdminSite
except:
    return None
else:
   return admin.site._registry.get(model)
Run Code Online (Sandbox Code Playgroud)

是否有官方(或更简单)的方式来获取模型的管理选项?

python django

14
推荐指数
1
解决办法
223
查看次数

Django app默认?

我正在寻找一种方法来使应用程序默认设置和设置易于使用,很难出错,并且开销很小..

目前我的组织如下:

myapp/defaults.py
    # application defaults
    import sys
    if sys.platform == 'win32':
         MYAPP_HOME_ROOT = os.path.dirname(os.environ['USERPROFILE'])
    else:
         MYAPP_HOME_ROOT = '/home'
Run Code Online (Sandbox Code Playgroud)

在我的项目中我有:

mysite/settings.py
    from myapp.defaults import *       # import all default from myapp
    MYAPP_HOME_ROOT = '/export/home'   # overriding myapp.defaults 
Run Code Online (Sandbox Code Playgroud)

通过此设置,我可以以常规django方式导入和使用设置(from django.conf import settingssettings.XXX).

update-3(为什么我们需要这个)

  1. 默认设置("默认值"):
    1. 如果可以通过覆盖一组合理的默认设置来配置应用程序,则应用程序更方便使用.
    2. 应用程序"具有领域知识",因此它尽可能提供合理的默认值是有意义的.
    3. 应用程序的用户需要提供每个应用程序所需的所有设置是不方便的,应该足以覆盖一个小子集并将其余部分保留为默认值.
    4. 如果默认值可以对环境做出反应,那么它非常有用.当DEBUGTrue为True时,您通常会想要做一些不同的事情,但任何其他全局设置都可能有用:例如MYAPP_IDENTICON_DIR = os.path.join(settings.MEDIA_ROOT, 'identicons')(https://en.wikipedia.org/wiki/Identicon)
    5. 项目(站点/全局)设置必须覆盖app-defaults,即MYAPP_IDENTICON_DIR = 's3://myappbucket.example.com/identicons'在(全局)settings.py文件中为其站点定义的用户应获取此值,而不是应用程序的默认值.
    6. 任何与使用settings(import .. settings; settings.FOO)的常规方法保持接近的解决方案都优于需要新语法的解决方案(因为新语法会分歧,我们会获得使用app到app的设置的新的独特方式).
    7. python的禅可能适用于:
      • 如果实施很难解释,这是一个坏主意.
      • 如果实现很容易解释,那可能是个好主意.

(原帖后面提出了两个关键问题,上述假设未说明.)

问题#1: …

python django

14
推荐指数
1
解决办法
1161
查看次数

如何从django应用程序创建一个轮子?

可重用的应用程序文档(https://docs.djangoproject.com/en/1.9/intro/reusable-apps/)告诉您列出模板和静态文件MANIFEST.in,但它python setup.py bdist_wheel看起来根本不像查看该文件.

我已经看到了对data_files这些文件的引用,但这些文件相对于python安装(sys.prefix)而不是软件包安装(并且sys.prefixsite-packages跨系统不一致).

我是否正确假设myapp/templates/myapp/foo.html应该最终进入.../site-packages/myapp/templates/myapp/foo.html并且类似于静态文件,并且用户需要运行manage.py collectstatic之后pip install myapp

更新(示例):

以下结构:

(build2) go|c:\srv\tmp\myapp> tree
.
|-- MANIFEST.in
|-- myapp
|   |-- static
|   |   `-- myapp
|   |       `-- foo.css
|   |-- templates
|   |   `-- myapp
|   |       `-- foo.html
|   |-- urls.py
|   `-- views.py
`-- setup.py

5 directories, 6 files
Run Code Online (Sandbox Code Playgroud)

setup.py

import setuptools
from distutils.core import …
Run Code Online (Sandbox Code Playgroud)

python django setuptools

12
推荐指数
1
解决办法
1481
查看次数