小编Ara*_*Fey的帖子

是否可以在python中修改外部但不是全局范围的变量?

给出以下代码:

def A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()
Run Code Online (Sandbox Code Playgroud)

对于B()函数变量中的代码,b在外部作用域中,但不在全局作用域中.是否可以bB()函数内修改变量?当然我可以从这里读取它print(),但是如何修改呢?

python python-2.7

95
推荐指数
3
解决办法
5万
查看次数

如何将一个dicts列表合并为一个单词?

我怎么能把这样的词典列表

[{'a':1}, {'b':2}, {'c':1}, {'d':2}]
Run Code Online (Sandbox Code Playgroud)

进入这样一个单词

{'a':1, 'b':2, 'c':1, 'd':2}
Run Code Online (Sandbox Code Playgroud)

python

92
推荐指数
7
解决办法
6万
查看次数

TypeError:不能在re.findall()中的字节对象上使用字符串模式

我正在尝试学习如何从页面自动获取网址.在下面的代码中,我试图获取网页的标题:

import urllib.request
import re

url = "http://www.google.com"
regex = r'<title>(,+?)</title>'
pattern  = re.compile(regex)

with urllib.request.urlopen(url) as response:
   html = response.read()

title = re.findall(pattern, html)
print(title)
Run Code Online (Sandbox Code Playgroud)

我得到了这个意想不到的错误:

Traceback (most recent call last):
  File "path\to\file\Crawler.py", line 11, in <module>
    title = re.findall(pattern, html)
  File "C:\Python33\lib\re.py", line 201, in findall
    return _compile(pattern, flags).findall(string)
TypeError: can't use a string pattern on a bytes-like object
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python web-crawler python-3.x

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

字典列表

这是我目前如何在Python中将元组列表转换为字典:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?似乎应该有一个单行来做这件事.

python dictionary tuples list

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

访问列表中元组中的值

[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Run Code Online (Sandbox Code Playgroud)

如何从此列表中的每个元组返回第二个值?

期望的输出:

[2, 3, 5, 4, 7, 7, 8]
Run Code Online (Sandbox Code Playgroud)

python tuples list

80
推荐指数
3
解决办法
11万
查看次数

在循环中创建函数

我正在尝试在循环内创建函数并将它们存储在字典中.问题是字典中的所有条目似乎最终都映射到最后创建的函数.代码如下:

functions = []

for i in range(3):
    def f():
        return i

    # alternatively: f = lambda: i

    functions.append(f)
Run Code Online (Sandbox Code Playgroud)

这输出:

print([f() for f in functions])
# expected output: [0, 1, 2]
# actual output:   [2, 2, 2]
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

python function

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

我的正则表达式匹配太多了.我怎么让它停下来?

J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM
J0000010: Project name: E:\foo.pf
J0000011: Job name: MBiek Direct Mail Test
J0000020: Document 1 - Completed successfully
Run Code Online (Sandbox Code Playgroud)

我有这个巨大的丑陋的字符串,我正在尝试使用正则表达式从中提取片段.

在这种情况下,我想抓住"项目名称"之后的所有内容,直到它说"J0000011:"的部分(每次11将是一个不同的数字).

这是我一直在玩的正则表达式

Project name:\s+(.*)\s+J[0-9]{7}:
Run Code Online (Sandbox Code Playgroud)

问题是它不会停止,直到它碰到J0000020:最后.

如何在第一次出现J [0-9] {7}时使正则表达式停止?

regex

77
推荐指数
3
解决办法
4万
查看次数

检查路径在Python中是否有效,而不在路径的目标上创建文件

我有一个路径(包括目录和文件名).
我需要测试文件名是否有效,例如,如果文件系统允许我创建具有这样名称的文件.
文件名中包含一些unicode字符.

可以安全地假设路径的目录段是有效且可访问的(我试图使问题更加适用,显然我太过分了).

除非必须,否则我非常不想逃避任何事情.

我发布了一些我正在处理的示例字符,但显然它们会被堆栈交换系统自动删除.无论如何,我想保留标准的unicode实体ö,并且只保留文件名中无效的东西.


这是捕获.可能(或可能不)已经是路径目标的文件.我需要保留该文件(如果它存在),如果不存在则不创建文件.

基本上我想检查是否可以写入路径而不实际打开写入路径(以及通常需要的自动文件创建/文件clobbering).

因此:

try:
    open(filename, 'w')
except OSError:
    # handle error here
Run Code Online (Sandbox Code Playgroud)

从这里

是不可接受的,因为它会覆盖我不想触摸的现有文件(如果它在那里),或者如果不存在则创建所述文件.

我知道我能做到:

if not os.access(filePath, os.W_OK):
    try:
        open(filePath, 'w').close()
        os.unlink(filePath)
    except OSError:
        # handle error here
Run Code Online (Sandbox Code Playgroud)

但那会创建文件filePath,然后我必须这样做os.unlink.

最后,似乎花了6或7行来做一些应该简单os.isvalidpath(filePath)或类似的事情.


顺便说一下,我需要在(至少)Windows和MacOS上运行,所以我想避免特定于平台的东西.

``

python filesystems filepath

74
推荐指数
6
解决办法
7万
查看次数

Pythonic方法创建包含在多个列表中的所有值的联合

在python中进行一些XML处理.(编辑:我被迫在这个项目中使用Python 2.4,嘘!)我想知道什么是Pythonic最常用的方法(在多个列表中创建所有值的联合):

lists = [[1,4,3,2,4], [4,5]]
Run Code Online (Sandbox Code Playgroud)

python list set-union

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

Python中负数的模运算

我在Python中发现了一些关于负数的奇怪行为:

>>> -5 % 4
3
Run Code Online (Sandbox Code Playgroud)

谁能解释一下发生了什么?

python modulo negative-number

64
推荐指数
6
解决办法
5万
查看次数