python-数据库与多线程

1,基本的文件操作

python中os模块应用
import os
1.返回操作系统类型,值为posix,是linux操作系统,
 值为nt,是windows系统
 print os.name

2.返回操作系统的详细
 print os.uname()

3.系统的环境变量
 print os.environ
 print os.environ.get('PATH')

4.判断是否是绝对路径(不会判断文件或目录是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('/hello')

5.生成绝对路径
print os.path.abspath('hello.png')
print os.path.join('/home/kiosk', 'hello.png')
print os.path.join(os.path.abspath('.'), 'hello.png')

6. 获取目录名或者文件名
filename = '/home/kiosk/PycharmProjects/python/20180826python/Day08/hello.png'
print os.path.basename(filename)
print os.path.dirname(filename)

7. 创建目录/删除目录
 os.mkdir('img')
 os.makedirs('img/file') # mkdir -p
 os.rmdir('img')

8. 创建文件/删除文件
 os.mknod('westos.txt')
 os.remove('westos.txt')

9.文件的重命名(mv)
 os.rename('westos.txt','data1.txt')

10.判断文件或者目录是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')

11.分离后缀名和文件名
print os.path.splitext('hello.png')

12.将目录名和文件名分离
print os.path.split('/tmp/hello/hello.png')

2,典例

1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)

2.将当前img目录所有以.png结尾的后缀名改为.jpg
import os
import random
import string
def gen_code(len=4):
    # 随机生成4位文件名
    li = random.sample(string.ascii_letters + string.digits, len)
    # 将列表元素拼接成字符串
    return ''.join(li)
def create_file():
    # 随机生成多个文件名
    li = {gen_code() for i in range(100)}
    os.mkdir('img')
    for name in li:
        os.mknod('img/' + name + '.png')
# create_file()def modify_suffix(dirname, old_suffix, new_suffix):
    """
    :param dirname:  所要操作的目录
    :param old_suffix: 之前的文件后缀
    :param new_suffix: 新的文件后缀
    :return:
    """
    # 1.判断查找的目录是否存在,如果不存在,显示报错
    if os.path.exists(dirname):
        # 2.找出所有以old_suffix(.png)结尾的文件
        pngfiles = [filename for filename in os.listdir(dirname)
                    if filename.endswith(old_suffix)]
        # 3.将文件名和后缀名分开,留下文件名
        basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]
        print basefiles

        # 4.文重命名
        for filename in basefiles:
            # 需要加上目录名
            oldname = os.path.join(dirname, filename + old_suffix)
            newname = os.path.join(dirname, filename + new_suffix)
            os.rename(oldname, newname)
            print '%s 重命名成%s成功' % (oldname, newname)
    else:
        print '%s 不存在不能操作....' % dirname
modify_suffix('img','.jpg','.png')

python-数据库与多线程_第1张图片

连上一图

python-数据库与多线程_第2张图片

2,多线程

线程:线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。
每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程
线程和进程的区别
(1)线程共享内存空间;进程的内存是独立的
(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实      现
(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆
(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程
(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程py
python中有两个模块实现多线程thread后threading,而threading弥补了threa的一些缺点
说明一:
from threading import Thread
import time
def Foo(arg):
    for item in range(10):
        print item
        time.sleep(1)
print 'before'
t1 = Thread(target=Foo,args=(1,))
#t1.setDaemon(True)
t1.start()
# 主线程到join()不往下走了,直到到子线程执行完了
t1.join(5)
print 'after'
"""
主线程没有结束,子线程还会执行
什么时候主线程执行完了,子线程跟着主线程一起销毁了
"""
python-数据库与多线程_第3张图片

效果:

python-数据库与多线程_第4张图片
说明二多线程:
import threading
from time import ctime,sleep
def music(a):
    for i in range(2):
        print 'I was listening to %s. %s' %(a,ctime())
        sleep(1)
def movie(b):
    for i in range(2):
        print 'I was watching to %s. %s' %(b,ctime())
        sleep(5)
# 创建threads列表
threads=[]
t1 = threading.Thread(target=music,args=('告白气球',))
threads.append(t1)
t2 = threading.Thread(target=movie,args=('泰坦尼克号',))
threads.append(t2)
for t in threads:
    # 当父线程执行完最后一条语句后:print 'all over %s' %ctime()
    # 没有等待子线程,直接就退出了,同时我们的子线程也一同结束
    t.setDaemon(True)
    t.start()
# join()的作用是,在子线程完成之前,这个子线程的父线程将一直被阻塞
t.join()
print 'all over %s' %ctime()

python-数据库与多线程_第5张图片

python-数据库与多线程_第6张图片

说明三:单线程 即完成一项才进行下一项

python-数据库与多线程_第7张图片

3,数据库的增删改查

数据库的增:
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='dd',db='python3')
打开门
cur = conn.cursor()伸出手
sql = 'insert into usermg(id,name,address) values(%s,%s,%s)'操作数据
params = ('1','uu','usa')
reCount = cur.execute(sql,para)
conn.commit()提出请求
cur.close()把手伸回来
conn.close()把门关上
print reCount
2)数据库的删:
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='dd', db='python3')
打开门
cur = conn.cursor()伸出手
sql = 'delete from usermg where id = %s'操作数据
params = (1,)
reCount = cur.execute(sql,params)
conn.commit()提出请求
cur.close()把手伸回来
conn.close()把门关上
3)数据库的改:
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='dd',db='python3')
cur = conn.cursor()
sql = 'update usermg set name = %s where id = %s '
params = ('pp','1')
reCount = cur.execute(sql,params)
conn.commit()
cur.close()
conn.close()
4)数据库的查:
mport MySQLdb
conn = MySQLdb.Connect(host ='127.0.0.1',user='root',passwd='dd',db='python3')
打开门
cur = conn.cursor() # 创建一个手伸出手
# 拿东西
# 这个操作影响了多少行(有多少行被操作了)
reCount = cur.execute('select * from userInfo')
cur.close()伸回手
conn.close()关上门
print reCount

 

你可能感兴趣的:(python-数据库与多线程)