天道酬勤,学无止境

python-2.7

Check key exist in python dict

问题 下面是文件输出: apples:20 orange:100 下面是代码: d = {} with open('test1.txt') as f: for line in f: if ":" not in line: continue key, value = line.strip().split(":", 1) d[key] = value for k, v in d.iteritems(): if k == 'apples': v = v.strip() if v == 20: print "Apples are equal to 20" else: print "Apples may have greater than or less than 20" if k == 'orrange': v = v.strip() if v == 20: print "orange are equal to 100" else: print "orange may have greater than or less than 100" 在上面的代码中,我写的是“if k == 'orrange':”,但根据输出文件,它实际上是“橙色”。 在这种情况下,我必须打印或输出文件中不存在范围键。 请帮我。 这个怎么做 回答1 使用in关键字。 if 'apples' in d: if d[

2022-07-11 10:01:12    分类:技术分享    python   python-2.7

Python parallel processing to unzip files

问题 我是 python 并行处理的新手。 我在下面有一段代码,它遍历所有目录并解压缩所有 tar.gz 文件。 但是,这需要相当长的时间。 import tarfile import gzip import os def unziptar(path): for root, dirs, files in os.walk(path): for i in files: fullpath = os.path.join(root, i) if i.endswith("tar.gz"): print 'extracting... {}'.format(fullpath) tar = tarfile.open(fullpath, 'r:gz') tar.extractall(root) tar.close() path = 'C://path_to_folder' unziptar(path) print 'tar.gz extraction completed' 我一直在浏览一些关于多处理和 joblib 包的帖子,但我仍然不清楚如何修改我的脚本以并行运行。 任何帮助表示赞赏。 编辑:@tdelaney 感谢您的帮助,令人惊讶的是修改后的脚本需要两倍的时间来解压缩所有内容(60 分钟与原始脚本的 30 分钟相比)! 我查看任务管理器,似乎虽然使用了多核,但 CPU 使用率很低。

2022-07-11 09:59:04    分类:技术分享    python-2.7   parallel-processing   unzip   os.walk

Sort list of dictionaries by multiple keys with different ordering

问题 我需要对这个字典列表进行排序: [ {K: 1, B: 2, A: 3, Z: 4, ... } , ... ] 订购应为: K - 下降 B - 下降 A - 上升 Z - 上升 我只发现了如何按升序或降序对所有键进行排序( reverse=True ): stats.sort(key=lambda x: (x['K'], x['B'], x['A'], x['Z'])) 任何人都可以帮忙,如何按不同的键排序? 回答1 如果你有数字作为值,你可以使用这个: stats.sort(key=lambda x: (-x['K'], -x['B'], x['A'], x['Z'])) 对于一般值: stats.sort(key=lambda x: (x['A'], x['Z'])) stats.sort(key=lambda x: (x['K'], x['B']), reverse=True)

2022-07-11 09:35:52    分类:技术分享    python   list   sorting   python-2.7   dictionary

Dynamodb scan() using FilterExpression

问题 第一次在 Stack 上发帖,对使用 Python 和使用 DynamoDB 进行编程是相当新的,但我只是想对我的表运行扫描,它会根据两个预定义的属性返回结果。 ---这是我的 Python 代码片段--- shift = "3rd" date = "2017-06-21" if shift != "": response = table.scan( FilterExpression=Attr("Date").eq(date) and Attr("Shift").eq(shift) ) 我的 DynamoDB 有 4 个字段。 ID 日期转移安全 现在对于这个问题,在运行时,我得到了两个表条目,而我应该只得到第一个条目……根据我的扫描标准,一个“没有安全问题”的条目。 ---这是我的 DynamoDB 返回结果--- [ { "Shift": "3rd", "Safety": "No safety issues", "Date": "2017-06-21", "ID": "2" }, { "Shift": "3rd", "Safety": "Cut Finger", "Date": "2017-06-22", "ID": "4" } ] 退回物品:2 我相信,通过应用带有逻辑“和”的 FilterExpression,指定扫描操作正在寻找满足两个条件的条目,因为我使用了“和”

2022-05-17 05:28:25    分类:技术分享    python   python-2.7   amazon-dynamodb

Why is my gif missing png files after 753 iterations

问题 import imageio import os filenames =[] dirPath = "D:\\BandSim_2017-06-20_12_00_45\\" for file in os.listdir(dirPath): if file.endswith(".png"): filenames.append(dirPath+file) moviePath ="D:\\simulation.gif" with imageio.get_writer(moviePath,mode='I', duration=0.1) as writer: i=0 for filename in filenames: image = imageio.imread(filename) writer.append_data(image) print filename

2022-05-17 05:15:06    分类:技术分享    python-2.7   animation   gif   animated-gif   python-imageio

how avoid Anaconda to hijack pip

问题 我的 PC 上安装了 2 个版本的 Python(Windows 7、64 位)。 与 Anaconda 一起安装的 Python 2.7 版本 直接从 python.org 安装的 Python 3.6 版本(“常规 IDLE”) 现在,我想使用 pip 在 3.6 上安装必要的软件包,但 anaconda 一直在劫持命令。 例如,在 cmd 窗口中键入: 点安装 numpy 我得到: 已满足要求:c:\users\georges\anaconda2\lib\site_packages 中的 numpy python2.7就是这种情况,但我试图为没有安装Anaconda的3.6版安装它。 我尝试重新安装 pip,希望它能消除 Anaconda2 的劫持……失败。 我正在考虑完全删除 Anaconda2,尽管我冒着在 Windows 中删除程序的风险,并不一定会删除依赖项。 请问有什么线索吗? 回答1 我认为您正在寻找的是pip3 install pip3 并且您应该能够为 python3 安装软件包 它应该是 python3 安装设置的标准配置。 首先检查它是否存在 where pip3 对于任何进一步的问题,请查看此帖子 您不需要卸载 anaconda2。 两个 python 版本可以共存,不同的库分别由不同的包安装程序 pip 用于 python 2 和 pip3 用于

2022-05-17 03:40:14    分类:技术分享    python-2.7   pip   python-3.6

Memory-efficient filtering of `DataFrame` rows

问题 我有一个大型DataFrame对象(1,440,000,000 行)。 我在内存(交换包含)限制下运行。 我需要提取具有特定字段值的行的子集。 但是,如果我这样做: >>> SUBSET = DATA[DATA.field == value] 我以MemoryError异常或崩溃结束。 有没有办法明确过滤行 - 不计算中间掩码( DATA.field == value )? 我找到了 DataFrame.filter() 和 DataFrame.select() 方法,但它们对列标签/行索引而不是行数据进行操作。 回答1 df = df.query("field == value") 回答2 如果通过任何更改,DataFrame 中的所有数据都属于相同类型,请改用 numpy 数组,它的内存效率更高,速度更快。 您可以通过 df.as_matrix() 将数据框转换为 numpy 矩阵。 此外,您可能想检查数据帧已经占用了多少内存: import sys sys.getsizeof() 返回以字节为单位的大小。

2022-05-17 03:38:03    分类:技术分享    python   python-2.7   python-3.x   pandas

How to pretty format the printing of SQL Queries in SQLAlchemy?

问题 我正在使用 SQLAlchemy 使用compile和设置dialect和compile_kwargs参数动态生成 PL/SQL(例如,使用str(ins.compile(dialect=oracle.dialect(), compile_kwargs={'literal_binds': True})) ) 这工作正常,除了输出没有以最漂亮的 SQL 语句格式化。 例如,我的一个输出如下所示: INSERT INTO my_table (a, b, c) SELECT my_table2.d, bar.e, bar.f FROM my_table2 JOIN (SELECT my_table3.e AS e, max(my_table3.f) AS f, count(my_table3.g) AS g FROM my_table3 WHERE my_table3.h = 'foo' GROUP BY my_table3.e HAVING count(my_table3.g) = 1) bar ON my_table2.g = bar.g 相反,我希望它像下面这样打印出来: INSERT INTO my _table (a, b c) SELECT my_table2.d, bar.e, bar.f FROM my_table2 JOIN ( SELECT my_table3

2022-05-17 02:59:19    分类:技术分享    python   oracle   python-2.7   sqlalchemy

Python - Writing Separate Files per Section of a Single File

问题 from itertools import cycle filename = raw_input("Which file?: \n") dimensionsList = ["Section 1", "Section 2", "Section 3", "Section 4", "Section 5"] with open(filename+".txt", "rb") as oldfile: for i in dimensionsList: licycle = cycle(dimensionsList) nextelem = licycle.next() with open(i+".txt", "w") as newfile: for line in oldfile: if line.strip() == i: break for line in oldfile: if line.strip() == nextelem: break newfile.write(line) 回答1 问题 测试您的代码,它仅适用于第 1 部分(其他部分对我来说也是空白的)。 我意识到问题是部分之间的转换(而且, licycle在所有迭代中都重新启动)。 第 2 节在第二for读取( if line.strip() == nextelem )。 下一行是 Section 2 的数据

2022-05-17 01:17:07    分类:技术分享    python   python-2.7   parsing

Round float to 2 digits after dot in python

问题 我正在使用这段代码: f = 0.3223322 float('%.2f' % (f)) 没有 2 个铸件,是否有更多 Pythonic、更少冗长的方法? 文档中的以下注释不鼓励使用 round 浮点数的 round() 行为可能令人惊讶:例如,round(2.675, 2) 给出 2.67 而不是预期的 2.68。 这不是一个错误:这是因为大多数小数不能完全表示为浮点数。 有关详细信息,请参阅浮点算术:问题和限制。 回答1 回合(数字[,ndigits]): >>> round(0.3223322, 2) 0.32 请注意,由于浮点不精确,您可能仍希望在生成输出时使用一定精度的字符串格式。 根据您要实现的目标,使用Decimal类型可能是合适的: >>> from decimal import Decimal >>> round(Decimal(0.3223322), 2) Decimal('0.32') 它以(惊喜!)十进制而不是二进制进行数学运算,因此不会遇到任何十进制舍入问题(除非最初您尝试从浮点数创建它)。 回答2 这不是很好,但我总是喜欢: f=float(int(100*f))/100 远非最好的方法,但这是我经常使用的方法。 回答3 旧的,内置的 round() 有什么问题? 像这样使用它: round(input, digits) 示例输出: >>> f =

2022-05-17 00:59:05    分类:技术分享    python   python-2.7   python-3.x