python备忘录

来源:互联网 发布:木子软件福利 编辑:程序博客网 时间:2024/05/16 06:06

一 入门

整数

x = 0

浮点数

y = 0.0

字符串(只读)

z = ''

字节数组

w = bytearray(n)

列表(list)

a = []

元组(只读)

a = ()

字典(dict)

b = {}

函数

def func(p1, p2): #形参名称很重要

    pass

class a:

    def __init__(self):

        pass

    def func(self, p):

        pass

class b(a):

    def __init__(self, x):

        self.x = x

        pass

    def func(self, p):

        pass

ins = a()

sub = b(7)

包机制

每一个.py文件称为一个module,module之间可以互相导入。

.py文件所在的每个目录都放一个名为_init_.py 的文件.该文件内容可以为空.

sys.path记录了Python的包路径,类型是字符串,编程中可以直接修改sys.path

异常处理

try:

except Exception as err:

finally:


二 字符串 列表 字节数组

part 1

字符串是只读的,主要有下标操作,分片操作,字符串相加。

a = 'string'

b = a[-1]

b = a[2:]

b = a[:-2]

b = a[1:-2]

s = a + b

主要相关函数:len,split,find

x = len(a)

y = a.split('r')#返回列表

z = a.find('ing')#返回下标

列表,字节数组的操作和字符串类似,可读写。

字符串转列表

l = list(a)

列表转字符串

r = ''

for x in l:r += x

更像python:

r = ''.join(l)

字符串转字节数组

b = a.encode('utf-8')

字节数组转字符串

a = b.decode('utf-8')

字符串转整数

i = int(a)

整数转字符串

a = str(i)

格式化字符串(C语言风格)

s = '%04d %s' % (i, a)

由此可见,各种数据结构相互转换中,字符串处于核心地位。


三 文件

打开文件

fd = open('path/file', 'r')

'r'    以读方式打开文件。
'w'   以写方式打开文件。如文件存在,则清空该文件,再写入新内容。如果文件不存在则创建。
'a'    以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建。
'r+'  以读写方式打开文件。 
'w+' 清空文件内容,然后以读写方式打开文件。
'a+'  以读写方式打开文件,并把文件指针移到文件尾。 
'b'    以二进制模式打开文件。

我常用的方式:'ab+'

希望扩平台读写文件时汉字不乱码,所以用了'ab+'模式(写入的二进制由字符串统一编码成'utf-8'得到),还要注意windows和linux的路径分隔符不同。

读所有内容

all = fd.read()

由于操作的文件都是几KB的配置文件(大量数据都会存入数据库,而不是存入文件),所以读所有内容很常用。

读固定字节

b = fd.read(n)

读每行

lines = fd.readlines()

写文件

fd.write(b)

文本模式只能写入字符串,编码格式与操作系统有关。

二进制模式只能写入字节数组。

关闭文件

fd.close()


四 多线程

方法1,调用thread模块中的start_new_thread()函数

import time
import thread
def func(p1, p2):  
    time.sleep(1)
    thread.exit_thread()
thread.start_new_thread(func, (1,2))


方法2,写一个类继承threading.Thread

import time

import threading
class glass(threading.Thread):
    def __init__(self, n):  
        threading.Thread.__init__(self)  
        self.n = n  
   
    def run(self): #Overwrite run() method
time.sleep(self.n)
         
thread = glass(1)  
thread.start()


五 socket

服务端

from socket import *

HOST = ''
PORT = 9999
ADDR = (HOST, PORT)

sock = socket(AF_INET, SOCK_STREAM)
sock.bind(ADDR)
sock.listen(5)
print('waiting for connection...')
client, addr = sock.accept()
buffer = client.recv(1024)
client.send(buffer)
client.close()
sock.close()

客户端

from socket import *

HOST = '127.0.0.1'
PORT = 9999
ADDR = (HOST, PORT)

sock = socket(AF_INET, SOCK_STREAM)
sock.connect(ADDR)
sock.send('111'.encode('utf-8'))
data = sock.recv(1024)
print(data)
sock.close()

六 数据库

import MySQLdb

conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='root', db='test', charset='utf8')
cur = conn.cursor()

c = cur.execute('select * from user')
r = cur.fetchall()
print('result count ' + str(c))
print(r)

cur.execute('create database abc')
conn.select_db('abc')
cur.execute('create table test(k int, v varchar(20))')
value=[1,'1']
cur.execute('insert into test values(%s, %s)', value)
conn.commit()

cur.close()
conn.close()

七 json

json的本质是字符串,可与字典相互转换。

字典转字符串

str(d)

字典转json

json.dumps(d, ensure_ascii=False)

注意,字典转json的结果与转字符串的结果类似,但不相同。

字符串转字典

貌似没有现成的方法

json转字典

json.loads(s)


八 串口

打开串口
fd = serial.Serial(s2, int(s3), timeout=1)
之后fd就像以二进制方式打开的文件。

九 http

抓取网页主要用的函数是
response = urllib.request.urlopen(url)
之后response 就像以二进制方式打开的文件。

十 struct

s = struct.pack(fnt, *l)
此后s就像C中的结构体,可以直接写入文件。
l = struct.unpack(fnt, s)
这样可以读出s中的数据,l是元祖。
正常情况,python程序是用不到这些东西的。存数据有数据库,与C程序对接有json。
只有在读老的C程序生成的数据文件时,才可能有用。




0 0
原创粉丝点击