分类目录归档:技术体

Python – 存储二进制数据及序列化

本文是一系列介绍Python数据存储的文章之一。其他文章是:

上周我们已经看到了如何将数据存储到纯文本文件里,这样无论是任何编辑器或者其他程序都可以读取。我们还了解到,如果使用逗号来分割数据,那么文件需要遵循一个标准,然后就可以自动兼容其他应用程序,比如电子表格。这种方法的主要限制之一,就是如果数据本身就含有逗号的,那么文件就不再具有可读性。

本文将进一步讨论数据的编码。这将是我们能够理解为什么您使用Python所保存的内容,能够为普通的文本编辑器或者Web浏览器读取。我们还将了解到,如果我们能以正确的方式对数据进行编码,那么就可以节省磁盘上的空间。最后,我们还将仔细的讲解保存纯文本文件和二进制数据文件之间的区别。

继续阅读

Python – 在文件中存储数据

原文链接

这是一系列涉及python数据存储的文章中的第一篇。其他文章见:

存储二进制数据及序列化

使用数据库存储数据

在Python中使用HDF5文件

在大多数python程序中,将数据存储下来以备后续使用都是其核心部分。无论你是在实验室中做测量,还是要设计一个网络应用,你都会需要将信息以一种稳定的方法存储下来。例如,如果你要在完成实验后分析结果,那么结果就必须存储下来。又或者你可能需要将所有注册了你的网站的用户的邮箱地址存储下来。

即使存储数据是最重要的事情,但在不同的场合下还是要使用不同的方法。必须考虑到不同的因素,例如产生的数据量,数据是否是自明的,你之后要如何使用这些数据等等。这篇文章将带你开始了解不同的存储数据的方法。

继续阅读

Python SQLite 数据库操作指导

Mar 7, 2014
by Sebastian Raschka


连接到一个 SQLite 数据库

我们将在本教程中使用的sqlite3是Python标准库的一部分,它是SQLite数据库的一个良好且简单的接口:没有涉及服务器进程,无需配置,也没有我们需要担心的其他障碍。

一般来说,在我们可以通过Python的sqlite3模块对SQLite数据库执行任何操作之前,惟一需要做的就是打开一个SQLite数据库文件的连接:

import sqlite3
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()

 

继续阅读

禁用系统 Win 键 或 Win+F 的方法

作为一个 Everything 的用户,一件必做的事情是将 Win+F 设置为打开 Everything 而不是系统搜索。

但要怎么做到这一点,就比较麻烦。常见的思路是 利用 AutoHotKey 来覆写 Win+F。但我的 Dell 笔记本有一些奇怪的问题,按下三个键以上的组合热键时,可能会导致 Ctrl 或 Alt 键锁定。

所以我需要的方法是禁用掉 Windows 自己的 Win+F 热键,再直接把 Win+F 指定为 Everything 的热键。

通过修改注册表可以实现 1. 禁用所有 Win 组合键 或 2. 有选择的禁用若干 Win 组合键。首先给大家一份系统 Win 组合键列表供参考。

Hot Key Brief Description
Win-B set focus to the taskbar notification area
Win-D show the desktop same as “Show the Desktop” on context menu
Win-E open Computer
Win-F search for files
Win-Ctrl-F search for computers
Win-M minimise windows same as Alt-M
Win-Shift-M restore windows same as Ctrl-Z
same as “Undo” on context menu
Win-R open the Run dialog similar to “Run…” on start menu
Win-T cycle forwards through task buttons on taskbar
Win-Shift-T cycle backwards through task buttons on taskbar
Win-F1 open Windows Help and Support
Win-Break open System Properties
Win-1
Win-2

Win-0
Quick Launch shortcuts
    1. 禁用所有 Win 组合键

打开注册表(Win+R,输入 regedit),在下列位置新建一个 Value 为 NoWinKeys 的键值,设置为 1。

Key: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value: NoWinKeys
Type: REG_DWORD
Default: 0

2. 有选择的禁用若干组合键,例如我需要禁用 Win+F

打开注册表(Win+R,输入 regedit),在下列位置新建一个 Value 为 NoWinKeys 的键值,设置为 F。

注意这里如果需要禁用多个,继续添加字母即可。

Key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Value: DisabledHotkeys
Type: REG_SZ or REG_EXPAND_SZ

重启后生效。然后将 Everything 的热键设置一下即可。

Lbf, lbm, lbs 的转换问题

干机械,又要和英制单位,美标图纸打交道的人,常常会碰到这么几个词:

Pound(s), lb, lbm, lbs, lbf.

以及这么一个问题:

如何把 lbm 转换成 lbf?(How to convert lbm into lbf?)

比如,一个机构下面挂了 5000 pounds 的重量,现在想计算承载的压强是否超过许用应力(单位 psi, $$1psi = 1lbf/in^2$$),这时候你的承载到底是多少 lbf?

第一反应必然是 Google,Google 之后的第一个答案,却很可能把所有习惯了公制单位体系的人带到沟里去。

我们先从这个错误答案看起。其实,严格来说,这个答案并没错,只是不是你要的那个答案而已。

lbf 是力的单位,lbm 是质量单位,两者的关系:

$$1 lbf = 1 lbm * 32.2 ft/s^2$$

所以,当你需要把 lbm 转换成 lbf 的时候,要乘以这个 32.2 么?

NO.


这个问题的错误其实很简单。

$$1 lbf = 1 lbm * 32.2 ft/s^2$$只是 $$G=mg$$ 的变形而已。

做个简单类比,我们现在定义一个新的单位,叫做 kgf,1kgf 是 1kg 所受的重力。

那么,我们熟悉的 $$9.8N = 1kg * 9.8N/kg$$ 就会变成:

$$1 kgf = 1 kg * 9.8m/s^2$$

实际上,lbf 的定义就是 1 lbm 所受的重力,二者在数值上相等。但其中差了一个重力加速度 g。

所以,当需要把 Newton 转换成 lbf 的时候,就要当心了。

$$1 N = 1 kg m/s^2 =2.20 lbm3.28ft/s^2 =7.216 lbm*ft/s^2 =7.216/32.2 lbf= .224 lbf$$

Exercise 2-1 鸡兔同笼问题

这个系列是我用来练习 Perl 编程的一些自己写的非常简陋的代码。

全部习题来自 POJ 项目,原题目要求使用 C/C++ 实现。

问题描述

一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物?

继续阅读