我正在努力解决以下问题:我想转换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脚本需要从命令行传递的目录中读取文件.我已经定义了一个如下所示的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) 如果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)
这是国际海事组织的一步,应该是必要的,我在这里错过了什么?
我正在尝试使用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的内置函数(any(),all(),sum()命名一些)采取iterables但为什么len()不呢?
人们总是可以使用它sum(1 for i in iterable)作为等价物,但为什么它首先len()不采用迭代?
有一个用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) 我有一个问题如果我有一行看起来像这样
|ordernumber|qty|articlenumber| | 123125213| 3 |fffff111 |
我怎么能把它分成三行,如下所示:
|ordernumber|qty|articlenumber| | 123125213| 1 |fffff111 | | 123125213| 1 |fffff111 | | 123125213| 1 |fffff111 |
/ J
我有两个数字列表,一个叫xVar,另一个叫yVar.我将使用这两个元素在图形上绘制X和Y值.它们都具有相同数量的元素.
通常,我只是情节
ax.scatter(xVar,yVar,s=2,color='tomato');
Run Code Online (Sandbox Code Playgroud)
我想删除从数据yVar上超过一定的值,例如有一个所有数据yVar在价值100,但我也想删除相关的xVar值.有人可以提出一个方法来创建删除所有值2个的新变量yVar在100和xVar与它们相关的值?然后我可以在我的绘图线中用xVar&替换yVar新的变量.
再次感谢All,
该文档的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;我说不通
所以说我有一个名为的列表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 ×9
argparse ×1
csv ×1
defaultdict ×1
encoding ×1
file-io ×1
iterable ×1
list ×1
logging ×1
printing ×1
python-3.2 ×1
python-3.x ×1
sql ×1
sql-server ×1
syslog-ng ×1