Python 语法速览与实战清单

基础语法

Python 是一门高阶、动态类型的多范式编程语言;定义 Python 文件的时候我们往往会先声明文件编码方式:

指定脚本调用方式

#!/usr/bin/env python

配置 utf-8 编码

-- coding: utf-8 --

配置其他编码

-- coding: <encoding-name> --

Vim 中还可以使用如下方式

vim:fileencoding=<encoding-name>

人生苦短,请用 Python,大量功能强大的语法糖的同时让很多时候 Python 代码看上去有点像伪代码。譬如我们用 Python 实现的简易的快排相较于 Java 会显得很短小精悍:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) / 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)

print quicksort([3,6,8,10,1,2,1])

Prints "[1, 1, 2, 3, 6, 8, 10]"

控制台交互

可以根据 name 关键字来判断是否是直接使用 python 命令执行某个脚本,还是外部引用;Google 开源的 fire 也是不错的快速将某个类封装为命令行工具的框架:
import fire

class Calculator(object):
"""A simple calculator class."""

def double(self, number):
return 2 * number

if name == ‘main‘:
fire.Fire(Calculator)

python calculator.py double 10 # 20

python calculator.py double --number=15 # 30

Python 2 中 print 是表达式,而 Python 3 中 print 是函数;如果希望在 Python 2 中将 print 以函数方式使用,则需要自定义引入:
from future import print_function
我们也可以使用 pprint 来美化控制台输出内容:
import pprint

stuff = [‘spam‘, ‘eggs‘, ‘lumberjack‘, ‘knights‘, ‘ni‘]
pprint.pprint(stuff)

自定义参数

pp = pprint.PrettyPrinter(depth=6)
tup = (‘spam‘, (‘eggs‘, (‘lumberjack‘, (‘knights‘, (‘ni‘, (‘dead‘,(‘parrot‘, (‘fresh fruit‘,))))))))
pp.pprint(tup)
模块

Python 中的模块(Module)即是 Python 源码文件,其可以导出类、函数与全局变量;当我们从某个模块导入变量时,函数名往往就是命名空间(Namespace)。而 Python 中的包(Package)则是模块的文件夹,往往由 init.py 指明某个文件夹为包:

文件目录

someDir/
main.py
siblingModule.py

siblingModule.py

def siblingModuleFun():
print(‘Hello from siblingModuleFun‘)

def siblingModuleFunTwo():
print(‘Hello from siblingModuleFunTwo‘)

import siblingModule
import siblingModule as sibMod

sibMod.siblingModuleFun()

from siblingModule import siblingModuleFun
siblingModuleFun()

try:

Import ‘someModuleA‘ that is only available in Windows

import someModuleA

except ImportError:
try:

Import ‘someModuleB‘ that is only available in Linux

    import someModuleB
except ImportError:

Package 可以为某个目录下所有的文件设置统一入口:
someDir/
main.py
subModules/
init.py
subA.py
subSubModules/
init.py
subSubA.py

subA.py

def subAFun():
print(‘Hello from subAFun‘)

def subAFunTwo():
print(‘Hello from subAFunTwo‘)

subSubA.py

def subSubAFun():
print(‘Hello from subSubAFun‘)

def subSubAFunTwo():
print(‘Hello from subSubAFunTwo‘)

init.py from subDir

Adds ‘subAFun()‘ and ‘subAFunTwo()‘ to the ‘subDir‘ namespace

from .subA import *

The following two import statement do the same thing, they add ‘subSubAFun()‘ and ‘subSubAFunTwo()‘ to the ‘subDir‘ namespace. The first one assumes ‘init.py‘ is empty in ‘subSubDir‘, and the second one, assumes ‘init.py‘ in ‘subSubDir‘ contains ‘from .subSubA import *‘.

Assumes ‘init.py‘ is empty in ‘subSubDir‘

Adds ‘subSubAFun()‘ and ‘subSubAFunTwo()‘ to the ‘subDir‘ namespace

from .subSubDir.subSubA import *

Assumes ‘init.py‘ in ‘subSubDir‘ has ‘from .subSubA import *‘

Adds ‘subSubAFun()‘ and ‘subSubAFunTwo()‘ to the ‘subDir‘ namespace

from .subSubDir import *

init.py from subSubDir

Adds ‘subSubAFun()‘ and ‘subSubAFunTwo()‘ to the ‘subSubDir‘ namespace

from .subSubA import *

main.py

import subDir

subDir.subAFun() # Hello from subAFun
subDir.subAFunTwo() # Hello from subAFunTwo
subDir.subSubAFun() # Hello from subSubAFun
subDir.subSubAFunTwo() # Hello from subSubAFunTwo
表达式与控制流

条件选择

Python 中使用 if、elif、else 来进行基础的条件选择操作:
if x < 0:
x = 0
print(‘Negative changed to zero‘)
elif x == 0:
print(‘Zero‘)
else:
print(‘More‘)
Python 同样支持 ternary conditional operator:
a if condition else b
也可以使用 Tuple 来实现类似的效果:

test 需要返回 True 或者 False

(falseValue, trueValue)[test]

更安全的做法是进行强制判断

(falseValue, trueValue)[test == True]

或者使用 bool 类型转换函数

(falseValue, trueValue)[bool(<expression>)]
循环遍历

for-in 可以用来遍历数组与字典:
words = [‘cat‘, ‘window‘, ‘defenestrate‘]

for w in words:
print(w, len(w))

使用数组访问操作符,能够迅速地生成数组的副本

for w in words[:]:
if len(w) > 6:
words.insert(0, w)

words -> [‘defenestrate‘, ‘cat‘, ‘window‘, ‘defenestrate‘]

如果我们希望使用数字序列进行遍历,可以使用 Python 内置的 range 函数:
a = [‘Mary‘, ‘had‘, ‘a‘, ‘little‘, ‘lamb‘]

for i in range(len(a)):
print(i, a[i])
基本数据类型

可以使用内建函数进行强制类型转换(Casting):
int(str)
float(str)
str(int)
str(float)
Number: 数值类型
x = 3
print type(x) # Prints "<type ‘int‘>"
print x # Prints "3"
print x + 1 # Addition; prints "4"
print x - 1 # Subtraction; prints "2"
print x * 2 # Multiplication; prints "6"
print x 2 # Exponentiation; prints "9"
x += 1
print x # Prints "4"
x = 2
print x # Prints "8"
y = 2.5
print type(y) # Prints "<type ‘float‘>"
print y, y + 1, y
2, y
2 # Prints "2.5 3.5 5.0 6.25"
布尔类型

Python 提供了常见的逻辑操作符,不过需要注意的是 Python 中并没有使用 &&、|| 等,而是直接使用了英文单词。
t = True
f = False
print type(t) # Prints "<type ‘bool‘>"
print t and f # Logical AND; prints "False"
print t or f # Logical OR; prints "True"
print not t # Logical NOT; prints "False"
print t != f # Logical XOR; prints "True"
String: 字符串

Python 2 中支持 Ascii 码的 str() 类型,独立的 unicode() 类型,没有 byte 类型;而 Python 3 中默认的字符串为 utf-8 类型,并且包含了 byte 与 bytearray 两个字节类型:
type("Guido") # string type is str in python2

<type ‘str‘>

使用 future 中提供的模块来降级使用 Unicode

from future import unicode_literals
type("Guido") # string type become unicode

<type ‘unicode‘>

Python 字符串支持分片、模板字符串等常见操作:
var1 = ‘Hello World!‘
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

var1[0]: H

var2[1:5]: ytho

print "My name is %s and weight is %d kg!" % (‘Zara‘, 21)

My name is Zara and weight is 21 kg!

str[0:4]
len(str)

string.replace("-", " ")
",".join(list)
"hi {0}".format(‘j‘)
str.find(",")
str.index(",") # same, but raises IndexError
str.count(",")
str.split(",")

str.lower()
str.upper()
str.title()

str.lstrip()
str.rstrip()
str.strip()

str.islower()

移除所有的特殊字符

re.sub(‘[^A-Za-z0-9]+‘, ‘‘, mystring)
如果需要判断是否包含某个子字符串,或者搜索某个字符串的下标:

in 操作符可以判断字符串

if "blah" not in somestring:
continue

find 可以搜索下标

s = "This be a string"
if s.find("is") == -1:
print "No ‘is‘ here!"
else:
print "Found ‘is‘ in the string."
Regex: 正则表达式
import re

判断是否匹配

re.match(r‘^[aeiou]‘, str)

以第二个参数指定的字符替换原字符串中内容

re.sub(r‘^[aeiou]‘, ‘?‘, str)
re.sub(r‘(xyz)‘, r‘\1‘, str)

编译生成独立的正则表达式对象

expr = re.compile(r‘^...$‘)
expr.match(...)
expr.sub(...)
下面列举了常见的表达式使用场景:

检测是否为 HTML 标签

re.search(‘<[^/>][^>]*>‘, ‘<a href="#label">‘)

常见的用户名密码

re.match(‘^[a-zA-Z0-9-]{3,16}$‘, ‘Foo‘) is not None
re.match(‘^\w|[-
]{3,16}$‘, ‘Foo‘) is not None

Email

re.match(‘^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$‘, ‘[email protected]‘)

Url

exp = re.compile(r‘‘‘^(https?:\/\/)? # match http or https
([\da-z.-]+) # match domain
.([a-z.]{2,6}) # match domain
([\/\w .-]*)\/?$ # match api or file
‘‘‘, re.X)
exp.match(‘www.google.com‘)

IP 地址

exp = re.compile(r‘‘‘^(?:(?:25[0-5]
|2[0-4][0-9]
|[1]?[0-9][0-9]?).){3}
(?:25[0-5]
|2[0-4][0-9]
|[1]?[0-9][0-9]?)$‘‘‘, re.X)
exp.match(‘192.168.1.1‘)
集合类型

List: 列表

Operation: 创建增删

list 是基础的序列类型:
l = []
l = list()

使用字符串的 split 方法,可以将字符串转化为列表

str.split(".")

如果需要将数组拼装为字符串,则可以使用 join

list1 = [‘1‘, ‘2‘, ‘3‘]
str1 = ‘‘.join(list1)

如果是数值数组,则需要先进行转换

list1 = [1, 2, 3]
str1 = ‘‘.join(str(e) for e in list1)
可以使用 append 与 extend 向数组中插入元素或者进行数组连接
x = [1, 2, 3]

x.append([4, 5]) # [1, 2, 3, [4, 5]]

x.extend([4, 5]) # [1, 2, 3, 4, 5],注意 extend 返回值为 None
可以使用 pop、slices、del、remove 等移除列表中元素:
myList = [10,20,30,40,50]

弹出第二个元素

myList.pop(1) # 20

myList: myList.pop(1)

如果不加任何参数,则默认弹出最后一个元素

myList.pop()

使用 slices 来删除某个元素

a = [ 1, 2, 3, 4, 5, 6 ]
index = 3 # Only Positive index
a = a[:index] + a[index+1 :]

根据下标删除元素

myList = [10,20,30,40,50]
rmovIndxNo = 3
del myList[rmovIndxNo] # myList: [10, 20, 30, 50]

使用 remove 方法,直接根据元素删除

letters = ["a", "b", "c", "d", "e"]
numbers.remove(numbers[1])
print(letters) # used a to make it unpack you don‘t have to
Iteration: 索引遍历

你可以使用基本的 for 循环来遍历数组中的元素,就像下面介个样纸:
animals = [‘cat‘, ‘dog‘, ‘monkey‘]
for animal in animals:
print animal

Prints "cat", "dog", "monkey", each on its own line.

如果你在循环的同时也希望能够获取到当前元素下标,可以使用 enumerate 函数:
animals = [‘cat‘, ‘dog‘, ‘monkey‘]
for idx, animal in enumerate(animals):
print ‘#%d: %s‘ % (idx + 1, animal)

Prints "#1: cat", "#2: dog", "#3: monkey", each on its own line

Python 也支持切片(Slices):
nums = range(5) # range is a built-in function that creates a list of integers
print nums # Prints "[0, 1, 2, 3, 4]"
print nums[2:4] # Get a slice from index 2 to 4 (exclusive); prints "[2, 3]"
print nums[2:] # Get a slice from index 2 to the end; prints "[2, 3, 4]"
print nums[:2] # Get a slice from the start to index 2 (exclusive); prints "[0, 1]"
print nums[:] # Get a slice of the whole list; prints ["0, 1, 2, 3, 4]"
print nums[:-1] # Slice indices can be negative; prints ["0, 1, 2, 3]"
nums[2:4] = [8, 9] # Assign a new sublist to a slice
print nums # Prints "[0, 1, 8, 9, 4]"
Comprehensions: 变换

Python 中同样可以使用 map、reduce、filter,map 用于变换数组:

使用 map 对数组中的每个元素计算平方

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

map 支持函数以数组方式连接使用

def multiply(x):
return (x*x)
def add(x):
return (x+x)

funcs = [multiply, add]
for i in range(5):
value = list(map(lambda x: x(i), funcs))
print(value)
reduce 用于进行归纳计算:

reduce 将数组中的值进行归纳

from functools import reduce
product = reduce((lambda x, y: x * y), [1, 2, 3, 4])

Output: 24

filter 则可以对数组进行过滤:
number_list = range(-5, 5)
less_than_zero = list(filter(lambda x: x < 0, number_list))
print(less_than_zero)

Output: [-5, -4, -3, -2, -1]

字典类型

创建增删
d = {‘cat‘: ‘cute‘, ‘dog‘: ‘furry‘} # 创建新的字典
print d[‘cat‘] # 字典不支持点(Dot)运算符取值
如果需要合并两个或者多个字典类型:

python 3.5

z = {x, y}

python 2.7

def merge_dicts(*dict_args):
"""
Given any number of dicts, shallow copy and merge into a new dict,
precedence goes to key value pairs in latter dicts.
"""
result = {}
for dictionary in dict_args:
result.update(dictionary)
return result
索引遍历

可以根据键来直接进行元素访问:

Python 中对于访问不存在的键会抛出 KeyError 异常,需要先行判断或者使用 get

print ‘cat‘ in d # Check if a dictionary has a given key; prints "True"

如果直接使用 [] 来取值,需要先确定键的存在,否则会抛出异常

print d[‘monkey‘] # KeyError: ‘monkey‘ not a key of d

使用 get 函数则可以设置默认值

print d.get(‘monkey‘, ‘N/A‘) # Get an element with a default; prints "N/A"
print d.get(‘fish‘, ‘N/A‘) # Get an element with a default; prints "wet"

d.keys() # 使用 keys 方法可以获取所有的键
可以使用 for-in 来遍历数组:

遍历键

for key in d:

比前一种方式慢

for k in dict.keys(): ...

直接遍历值

for value in dict.itervalues(): ...

Python 2.x 中遍历键值

for key, value in d.iteritems():

Python 3.x 中遍历键值

for key, value in d.items():
其他序列类型

集合

Same as {"a", "b","c"}

normal_set = set(["a", "b","c"])

Adding an element to normal set is fine

normal_set.add("d")

print("Normal Set")
print(normal_set)

A frozen set

frozen_set = frozenset(["e", "f", "g"])

print("Frozen Set")
print(frozen_set)

Uncommenting below line would cause error as

we are trying to add element to a frozen set

frozen_set.add("h")

函数

函数定义

Python 中的函数使用 def 关键字进行定义,譬如:
def sign(x):
if x > 0:
return ‘positive‘
elif x < 0:
return ‘negative‘
else:
return ‘zero‘

for x in [-1, 0, 1]:
print sign(x)

Prints "negative", "zero", "positive"

Python 支持运行时创建动态函数,也即是所谓的 lambda 函数:
def f(x): return x**2

等价于

g = lambda x: x**2
参数

Option Arguments: 不定参数
def example(a, b=None, *args, **kwargs):
print a, b
print args
print kwargs

example(1, "var", 2, 3, word="hello")

1 var

(2, 3)

{‘word‘: ‘hello‘}

a_tuple = (1, 2, 3, 4, 5)
a_dict = {"1":1, "2":2, "3":3}
example(1, "var", *a_tuple, **a_dict)

1 var

(1, 2, 3, 4, 5)

{‘1‘: 1, ‘2‘: 2, ‘3‘: 3}

生成器
def simple_generator_function():
yield 1
yield 2
yield 3

for value in simple_generator_function():
print(value)

输出结果

1

2

3

our_generator = simple_generator_function()
next(our_generator)

1

next(our_generator)

2

next(our_generator)
#3

生成器典型的使用场景譬如无限数组的迭代

def get_primes(number):
while True:
if is_prime(number):
yield number
number += 1
装饰器

装饰器是非常有用的设计模式:

简单装饰器

from functools import wraps
def decorator(func):br/>@wraps(func)
def wrapper(*args, *kwargs):
print(‘wrap function‘)
return func(
args, **kwargs)
return wrapper

@decorator
def example(*a, **kw):
pass

example.name # attr of function preserve

‘example‘

Decorator

带输入值的装饰器

from functools import wraps
def decorator_with_argument(val):
def decorator(func):br/>@wraps(func)
def wrapper(*args, *kwargs):
print "Val is {0}".format(val)
return func(
args, **kwargs)
return wrapper
return decorator

@decorator_with_argument(10)
def example():
print "This is example function."

example()

Val is 10

This is example function.

等价于

def example():
print "This is example function."

example = decorator_with_argument(10)(example)
example()

Val is 10

This is example function.

类与对象

类定义

Python 中对于类的定义也很直接:
class Greeter(object):

# Constructor
def __init__(self, name):
    self.name = name  # Create an instance variable

# Instance method
def greet(self, loud=False):
    if loud:
        print ‘HELLO, %s!‘ % self.name.upper()
    else:
        print ‘Hello, %s‘ % self.name

g = Greeter(‘Fred‘) # Construct an instance of the Greeter class
g.greet() # Call an instance method; prints "Hello, Fred"
g.greet(loud=True) # Call an instance method; prints "HELLO, FRED!"

isinstance 方法用于判断某个对象是否源自某个类

ex = 10
isinstance(ex,int)
Managed Attributes: 受控属性

property、setter、deleter 可以用于复写点方法

class Example(object):
def init(self, value):
self._val = valuebr/>@property
def val(self):
return self._val
br/>@val.setter
def val(self, value):
if not isintance(value, int):
raise TypeError("Expected int")
self._val = value
br/>@val.deleter
def val(self):
del self._val
br/>@property
def square3(self):
return 2**3

ex = Example(123)
ex.val = "str"

Traceback (most recent call last):

File "", line 1, in

File "test.py", line 12, in val

raise TypeError("Expected int")

TypeError: Expected int

类方法与静态方法
class example(object):
br/>@classmethod
def clsmethod(cls):
print "I am classmethod"
br/>@staticmethod
def stmethod():
print "I am staticmethod"
def instmethod(self):
print "I am instancemethod"

ex = example()
ex.clsmethod()

I am classmethod

ex.stmethod()

I am staticmethod

ex.instmethod()

I am instancemethod

example.clsmethod()

I am classmethod

example.stmethod()

I am staticmethod

example.instmethod()

Traceback (most recent call last):

File "", line 1, in

TypeError: unbound method instmethod() ...

对象

实例化
属性操作

Python 中对象的属性不同于字典键,可以使用点运算符取值,直接使用 in 判断会存在问题:
class A(object):
br/>@property
def prop(self):
return 3

a = A()
print "‘prop‘ in a.dict =", ‘prop‘ in a.dict
print "hasattr(a, ‘prop‘) =", hasattr(a, ‘prop‘)
print "a.prop =", a.prop

‘prop‘ in a.dict = False

hasattr(a, ‘prop‘) = True

a.prop = 3

建议使用 hasattr、getattr、setattr 这种方式对于对象属性进行操作:
class Example(object):
def init(self):
self.name = "ex"
def printex(self):
print "This is an example"

Check object has attributes

hasattr(obj, ‘attr‘)

ex = Example()
hasattr(ex,"name")

True

hasattr(ex,"printex")

True

hasattr(ex,"print")

False

Get object attribute

getattr(obj, ‘attr‘)

getattr(ex,‘name‘)

‘ex‘

Set object attribute

setattr(obj, ‘attr‘, value)

setattr(ex,‘name‘,‘example‘)
ex.name

‘example‘

异常与测试

异常处理

Context Manager - with

with 常用于打开或者关闭某些资源:
host = ‘localhost‘
port = 5566
with Socket(host, port) as s:
while True:
conn, addr = s.accept()
msg = conn.recv(1024)
print msg
conn.send(msg)
conn.close()
单元测试
from future import print_function

import unittest

def fib(n):
return 1 if n<=2 else fib(n-1)+fib(n-2)

def setUpModule():
print("setup module")
def tearDownModule():
print("teardown module")

class TestFib(unittest.TestCase):

def setUp(self):
    print("setUp")
    self.n = 10
def tearDown(self):
    print("tearDown")
    del self.n
@classmethod
def setUpClass(cls):
    print("setUpClass")
@classmethod
def tearDownClass(cls):
    print("tearDownClass")
def test_fib_assert_equal(self):
    self.assertEqual(fib(self.n), 55)
def test_fib_assert_true(self):
    self.assertTrue(fib(self.n) == 55)

if name == "main":
unittest.main()
存储

文件读写

路径处理

Python 内置的 file 关键字会指向当前文件的相对路径,可以根据它来构造绝对路径,或者索引其他文件:

获取当前文件的相对目录

dir = os.path.dirname(file) # src\app

once you‘re at the directory level you want, with the desired directory as the final path node:

dirname1 = os.path.basename(dir)
dirname2 = os.path.split(dir)[1] ## if you look at the documentation, this is exactly what os.path.basename does.

获取当前代码文件的绝对路径,abspath 会自动根据相对路径与当前工作空间进行路径补全

os.path.abspath(os.path.dirname(file)) # D:\WorkSpace\OWS\tool\ui-tool-svn\python\src\app

获取当前文件的真实路径

os.path.dirname(os.path.realpath(file)) # D:\WorkSpace\OWS\tool\ui-tool-svn\python\src\app

获取当前执行路径

os.getcwd()
可以使用 listdir、walk、glob 模块来进行文件枚举与检索:

仅列举所有的文件

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

使用 walk 递归搜索

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break

使用 glob 进行复杂模式匹配

import glob
print(glob.glob("/home/adam/*.txt"))

[‘/home/adam/file1.txt‘, ‘/home/adam/file2.txt‘, .... ]

简单文件读写

可以根据文件是否存在选择写入模式

mode = ‘a‘ if os.path.exists(writepath) else ‘w‘

使用 with 方法能够自动处理异常

with open("file.dat",mode) as f:
f.write(...)
...

操作完毕之后记得关闭文件

f.close()

读取文件内容

message = f.read()
复杂格式文件

JSON
import json

Writing JSON data

with open(‘data.json‘, ‘w‘) as f:
json.dump(data, f)

Reading data back

with open(‘data.json‘, ‘r‘) as f:
data = json.load(f)
XML

我们可以使用 lxml 来解析与处理 XML 文件,本部分即对其常用操作进行介绍。lxml 支持从字符串或者文件中创建 Element 对象:
from lxml import etree

可以从字符串开始构造

xml = ‘<a xmlns="test"><b xmlns="test"/></a>‘
root = etree.fromstring(xml)
etree.tostring(root)

b‘<a xmlns="test"><b xmlns="test"/></a>‘

也可以从某个文件开始构造

tree = etree.parse("doc/test.xml")

或者指定某个 baseURL

root = etree.fromstring(xml, base_url="http://where.it/is/from.xml")
其提供了迭代器以对所有元素进行遍历:

遍历所有的节点

for tag in tree.iter():
if not len(tag):
print tag.keys() # 获取所有自定义属性
print (tag.tag, tag.text) # text 即文本子元素值

获取 XPath

for e in root.iter():
print tree.getpath(e)
lxml 支持以 XPath 查找元素,不过需要注意的是,XPath 查找的结果是数组,并且在包含命名空间的情况下,需要指定命名空间:
root.xpath(‘//page/text/text()‘,ns={prefix:url})

可以使用 getparent 递归查找父元素

el.getparent()
lxml 提供了 insert、append 等方法进行元素操作:

append 方法默认追加到尾部

st = etree.Element("state", name="New Mexico")
co = etree.Element("county", name="Socorro")
st.append(co)

insert 方法可以指定位置

node.insert(0, newKid)
Excel

可以使用 [xlrd]() 来读取 Excel 文件,使用 xlsxwriter 来写入与操作 Excel 文件。

读取某个 Cell 的原始值

sh.cell(rx, col).value

创建新的文件

workbook = xlsxwriter.Workbook(outputFile)
worksheet = workbook.add_worksheet()

设置从第 0 行开始写入

row = 0

遍历二维数组,并且将其写入到 Excel 中

for rowData in array:
for col, data in enumerate(rowData):
worksheet.write(row, col, data)
row = row + 1

workbook.close()
文件系统

对于高级的文件操作,我们可以使用 Python 内置的 shutil

递归删除 appName 下面的所有的文件夹

shutil.rmtree(appName)
网络交互

Requests

Requests 是优雅而易用的 Python 网络请求库:
import requests

r = requests.get(‘https://api.github.com/events‘)
r = requests.get(‘
https://api.github.com/user‘, auth=(‘user‘, ‘pass‘))

r.status_code

200

r.headers[‘content-type‘]

‘application/json; charset=utf8‘

r.encoding

‘utf-8‘

r.text

u‘{"type":"User"...‘

r.json()

{u‘private_gists‘: 419, u‘total_private_repos‘: 77, ...}

r = requests.put(‘http://httpbin.org/put‘, data = {‘key‘:‘value‘})
r = requests.delete(‘http://httpbin.org/delete‘)
r = requests.head(‘http://httpbin.org/get‘)
r = requests.options(‘http://httpbin.org/get‘)
数据存储

MySQL
import pymysql.cursors

Connect to the database

connection = pymysql.connect(host=‘localhost‘,
user=‘user‘,
password=‘passwd‘,
db=‘db‘,
charset=‘utf8mb4‘,
cursorclass=pymysql.cursors.DictCursor)

try:
with connection.cursor() as cursor:

Create a new record

    sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
    cursor.execute(sql, (‘[email protected]‘, ‘very-secret‘))

# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()

with connection.cursor() as cursor:
    # Read a single record
    sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
    cursor.execute(sql, (‘[email protected]‘,))
    result = cursor.fetchone()
    print(result)

finally:
connection.close()

最后,如果你跟我一样都喜欢python,也在学习python的道路上奔跑,欢迎你加入python学习群:839383765 群内每天都会分享最新业内资料,企业项目案例,分享python免费课程,共同交流学习,让学习变(编)成(程)一种习惯!

原文地址:https://blog.51cto.com/14186420/2377384

时间: 2024-07-29 17:26:23

Python 语法速览与实战清单的相关文章

python 基本语法速览,快速入门

https://zhuanlan.zhihu.com/p/24536868 学习参考于这个博文. 我做一个笔记. 关于python一些常用的语法快速的预览,适合已经掌握一门编程语言的人.零基础,没有任何编程经验的不适用快速入门. 基础数据类型 和其他主流语言一样,Python为我们提供了包括integer.float.boolean.strings等在内的很多基础类型. 数值类型 x = 3 print type(x) # Prints "<type 'int'>" pri

Python语法速查: 4. 字符串常用操作

(1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串属于不可变序列,所有处理修改字符的方法,都会生成一个新字符串返回,原字符串不会变. 字符串方法 简述 举例或说明 字符串内容检查 s.isalpha() 是否所有字符都为字母 'abc'.isalpha()   # 结果为 True s.islower() 字符串中字母是否都为小写(无视其中的非字母字符) '

快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感.Swift提供很多基础类型,如Int,String,Double,Bool等类型,它和Objective-C的相关类型对应,不过他是值类型,而Objective-C的基础类型是引用类型,另外Swift还提供了几个集合类型,如Array, Set, 和

Python语法速查: 10. 异常

返回目录 本篇索引 (1)内置异常 (2)自定义异常 (3)主动引发异常 (4)捕捉异常 (5)error模块 (6)with语句 (1)内置异常 ● 异常的基类: 以下这些异常作为具体异常的基类,都不会被显式引发,但是可以使用它们捕捉某种错误. 基类名称 说明 BaseException 所有内置异常的基类,其他所有内置异常都派生自该类.   Exception 所有内置的非系统退出异常都派生自此类(即除了:SystemExit, GeneratorExit, KeyboardInterrup

Python语法速查: 20. 线程与并发

返回目录 本篇索引 (1)线程基本概念 (2)threading模块 (3)线程间同步原语资源 (4)queue (1)线程基本概念 当应用程序需要并发执行多个任务时,可以使用线程.多个线程(thread)同时运行在一个进程(process)的内部, 它们可以共享访问本进程内的全局变量数据和资源.各个线程之间的调度由操作系统负责, 具体做法是:给每个线程分配一个小的时间片,并在所有的线程之间循环切换.在具有多核的CPU上, 操作系统有时会安排尽可能使用每个CPU,从而并行执行线程. 并发编程的复

Python语法速查: 3. 字符串格式化

(1)简易字符串格式化 字符串属于不可变序列,只能生成新的,不能改变旧的.“字符串格式化”有点像以前C语言的sprintf,可以将若干变量代入格式化的字符串,生成一个符合要求的新字符串. 转换字符 简述 举例或说明 %d 十进制整数 'num: %d' %16   # 结果为 'num: 16' %o 八进制整数 'num: %o' %16   # 结果为 'num: 20' %x, %X 十六进制整数(大小写影响输出字母) 'num: %x' %31   # 结果为 'num: 1f'(小写)

Python语法速查: 12. 文件与输入输出

返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 f.close() file对象方法,关闭文件. f.read() file对象方法,读取最多n个字节,若不指定n,则默认读取整个文件.读出的内容以字符串形式返回. f.readline(size=-1) file对象方法.读取整行并返回一个字符串,若指定size,则本行最多读取size个字节.读

Python语法速查:2x. 杂项

返回目录 本篇索引 (1)运行Python程序的方法 (2)查看Python版本 (3)文档字符串和帮助 (4)源代码编码方式 (5)标识符一般约定 (1)运行Python程序的方法 一般不管在Windows下还是Linux下,运行Python程序都要先输入Python解释器名,然后跟一个.py文件名,格式如下: # Windows下运行.py文件(需要事先在环境变量中设置好python解释器的默认路径) python xxx.py # Linxu下运行.py文件 /usr/bin/python

云计算开发教程:Python自动化运维开发实战流程控制

今天这篇文章是给大家分享一些云计算开发教程,今天讲解的是:Python自动化运维开发实战流程控制. Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句-- else: 执行语句-- 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范