小编iru*_*var的帖子

如何在Orthon3中将OrderedDict转换为常规字典

我正在努力解决以下问题:我想转换OrderedDict如下:

OrderedDict([('method', 'constant'), ('data', '1.225')])
Run Code Online (Sandbox Code Playgroud)

成为这样的常规字典:

{'method': 'constant', 'data':1.225}
Run Code Online (Sandbox Code Playgroud)

因为我必须将它作为字符串存储在数据库中.转换后,订单不再重要,所以无论如何我都可以省去订购的功能.

感谢任何提示或解决方案,

python ordereddictionary type-conversion

86
推荐指数
5
解决办法
7万
查看次数

argparse的目录路径类型

我的python脚本需要从命令行传递的目录中读取文件.我已经定义了一个如下所示的readable_dir类型,用于与argparse一起验证在命令行上传递的目录是否存在且可读.此外,还为directory参数指定了默认值(下例中的/ tmp/non_existent_dir).这里的问题是argparse在默认值上调用readable_dir(),即使在命令行中显式传入目录参数的情况下也是如此.这会导致脚本丢失,因为在命令行上显式传入目录的上下文中不存在缺省路径/ tmp/non_existent_dir.我可以通过不指定默认值并强制使用此参数,或者通过将验证推迟到脚本中的后期来解决这个问题,但这是一个更优雅的解决方案,任何人都知道吗?

#!/usr/bin/python
import argparse
import os

def readable_dir(prospective_dir):
  if not os.path.isdir(prospective_dir):
    raise Exception("readable_dir:{0} is not a valid path".format(prospective_dir))
  if os.access(prospective_dir, os.R_OK):
    return prospective_dir
  else:
    raise Exception("readable_dir:{0} is not a readable dir".format(prospective_dir))

parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")
parser.add_argument('-l', '--launch_directory', type=readable_dir, default='/tmp/non_existent_dir')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

python argparse

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

追加到列表的defaultdict的一步初始化?

如果a defaultdict可以沿着以下行初始化将是方便的

d = defaultdict(list, (('a', 1), ('b', 2), ('c', 3), ('d', 4), ('a', 2),
   ('b', 3)))
Run Code Online (Sandbox Code Playgroud)

生产

defaultdict(<type 'list'>, {'a': [1, 2], 'c': [3], 'b': [2, 3], 'd': [4]})
Run Code Online (Sandbox Code Playgroud)

相反,我得到了

defaultdict(<type 'list'>, {'a': 2, 'c': 3, 'b': 3, 'd': 4})
Run Code Online (Sandbox Code Playgroud)

为了得到我需要的东西,我最终必须这样做:

d = defaultdict(list)
for x, y in (('a', 1), ('b', 2), ('c', 3), ('d', 4), ('a', 2), ('b', 3)):
    d[x].append(y)
Run Code Online (Sandbox Code Playgroud)

这是国际海事组织的一步,应该是必要的,我在这里错过了什么?

python defaultdict

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

在文件输入模块中结合就地过滤和编码设置

我正在尝试使用fileinput模块的就地过滤功能就地重写输入文件。

需要将编码(用于读写)设置为latin-1并尝试传递openhook=fileinput.hook_encoded('latin-1')给它,fileinput.input但由于错误而受阻

ValueError: FileInput cannot use an opening hook in inplace mode
Run Code Online (Sandbox Code Playgroud)

仔细检查后,我发现fileinput文档中明确说明了这一点:不能同时使用就位和openhook

我该如何解决?

python file-io encoding python-3.2

7
推荐指数
2
解决办法
2022
查看次数

为什么len()不支持迭代器?

许多Python的内置函数(any(),all(),sum()命名一些)采取iterables但为什么len()不呢?

人们总是可以使用它sum(1 for i in iterable)作为等价物,但为什么它首先len()不采用迭代?

python iterable

6
推荐指数
2
解决办法
441
查看次数

如何在Python Logging中设置源主机地址?

有一个用Python编写的脚本,它通过IPMI解析来自多个服务器的传感器数据和事件.然后它将图形数据发送到一个服务器,并将错误日志发送到另一个服 记录服务器是Syslog-ng + Mysql

因此,任务是按所有者存储日志,而不是由脚本宿主存储.

一些代码示例:

import logging
import logging.handlers

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)

loggerCent.addHandler(ce)

loggerCent.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

所以我需要扩展代码,以便我可以告诉syslog-ng,日志属于另一台主机.或者其他一些设计.

有任何想法吗?

UPD:

所以看起来有使用LogAdapter的方法.但如何使用它:

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
                               {'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

通过TcpDump查找消息我在LoggerAdapter中看不到任何关于主机的信息我做错了什么?

UPD2:

好吧,我找不到将主机发送到syslog-ng的方法.虽然可以在链中发送第一个主机,但我真的找不到通过Python Logging发送它的方法.

无论如何,我在syslog-ng: CSV Parser中创建了解析器

parser ipmimon_log {
        csv-parser(
    columns("LEVEL", "UNIT", "MESSAGE")
    flags(escape-double-char,strip-whitespace)
        delimiters(";")
        quote-pairs('""[](){}')
    );
};

log {
    source(s_net); …
Run Code Online (Sandbox Code Playgroud)

python logging syslog-ng

6
推荐指数
1
解决办法
5447
查看次数

根据列拆分2行或更多行上的行

我有一个问题如果我有一行看起来像这样

|ordernumber|qty|articlenumber|
|  123125213| 3 |fffff111     |

我怎么能把它分成三行,如下所示:

|ordernumber|qty|articlenumber|
|  123125213| 1 |fffff111     |
|  123125213| 1 |fffff111     |
|  123125213| 1 |fffff111     |

/ J

sql sql-server sql-server-2005

6
推荐指数
1
解决办法
1050
查看次数

python:如何根据1列表中的内容从2个列表中删除值

我有两个数字列表,一个叫xVar,另一个叫yVar.我将使用这两个元素在图形上绘制X和Y值.它们都具有相同数量的元素.

通常,我只是情节

ax.scatter(xVar,yVar,s=2,color='tomato');
Run Code Online (Sandbox Code Playgroud)

我想删除从数据yVar上超过一定的值,例如有一个所有数据yVar在价值100,但我也想删除相关的xVar值.有人可以提出一个方法来创建删除所有值2个的新变量yVar100xVar与它们相关的值?然后我可以在我的绘图线中用xVar&替换yVar新的变量.

再次感谢All,

python

5
推荐指数
1
解决办法
1695
查看次数

csv.writer.writerows需要迭代器吗?

该文档writerows状态

将所有行参数(如上所述的行对象列表)写入编写者的文件对象,并根据当前方言格式化。

它建议writerows以列表作为参数。但这可能需要迭代器,没问题

python -c 'import csv
> csv.writer(open("test.file.1", "w")).writerows(([x] for x in xrange(10)))
> '
cat test.file.1
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?是否在将迭代器写到文件之前将迭代器转换为列表,还是文档引起误解,并且实际上可以将迭代器写入文件而无需实现它们?基础代码在C;我说不通

python csv

5
推荐指数
1
解决办法
4859
查看次数

如何打印列表而不显示括号和输出中的""?Python 3.3.2

所以说我有一个名为的列表myList,它看起来像这样:

myList = ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

如何将其打印到屏幕上以便打印:

abc 
Run Code Online (Sandbox Code Playgroud)

(是的,中间没有空格)

如果我使用print(myList) 它打印以下内容:

['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助.

python printing list python-3.x

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