zoukankan      html  css  js  c++  java
  • Python编码/文件读取/多线程

    Python编码/文件读取/多线程

    个人笔记~~记录才有成长   编码/文件读取/多线程

    编码

      常用的一般是gbk、utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字来处理,所以需要对不同的编码格式进行转化。

      这里需要的函数decode和encode,形式都很简单,只要牢记对应的格式对应的编码就好

    如果是utf-8,想转换成unicode
    content.decode('utf-8')
    如果是Utf-8,想转换成gbk
    content.decode('utf-8').encode('gbk')

      注意:对于Python可以在.py中指定编码格式,如下选择的是utf-8格式

    # -*- coding: utf-8 -*-

    文件读取

    传统的读法,全部读出,按行处理:

    fp=open("./output.txt", "r");
    alllines=fp.readlines();
    fp.close();
    for eachline in alllines:
        print eachline;

    使用文件迭代器 每次只读取和显示一行:

    fp=open("./output.txt", "r");
    for eachline in fp:
        print eachline;

    读取和保存CSV文件,使用CSV模块

    import csv
    
    def loadFile(file_name):
        f = open(file_name)
        r = csv.reader(f)
        for item in r:
            print item
        type = sys.getfilesystemencoding()
        for line in r:
    
    def saveFile(result):
        writer = csv.writer(open('result.csv','w'), dialect='excel')
        for item in result:
            writer.writerow(item)

    多线程

      由于程序数据有点大,尝试一下Python的多线程,其实和C++/JAVA都是类似的

    调用thread模块中的start_new_thread()函数来产生新线

    import time
    import thread
    
    def timer(n, ID):
        cnt = 0
        while cnt<n:
            print 'Thread:(%d) Time:%s
    '%(ID,time.ctime())
            cnt+=1
        thread.exit_thread()
       
     
    def test(): #Use thread.start_new_thread() to create 2 new threads
        thread.start_new_thread(timer, (5,1))
        thread.start_new_thread(timer, (5,2))
     
    if __name__=='__main__':
        test()

      python中的线程是通过thread模块来调用的,调用thread.start_new_thread()函数,该函数由两部分参数,第一个参数为线程函数,第二个参数为提供给线程函数的tuple型参数。

    使用threading模块的 Thread类

       这里要接触到继承的概念了,这种处理方式相对来说要清晰的多。

      通过调用threading模块继承threading.Thread类来包装一个线程对象。

    • 在自己的线程类的__init__里调用threading.Thread.__init__(self, name = threadname)
    • Threadname为线程的名字
    • run(),通常需要重写,编写代码实现做需要的功能。
    • getName(),获得线程对象名称
    • setName(),设置线程对象名称
    • start(),启动线程
    • jion([timeout]),等待另一线程结束后再运行。
    • setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False。
    • isDaemon(),判断线程是否随主线程一起结束。
    • isAlive(),检查线程是否在运行中。
    import time
    import thread
    import threading
    
    def timer1(n, ID):
        cnt = 0
        while cnt<n:
            print 'Thread:(%d) Time:%s
    '%(ID,time.ctime())
            cnt+=1
        thread.exit_thread()
       
    class timer2(threading.Thread): #The timer class is derived from the class threading.Thread
        def __init__(self, ID):
            threading.Thread.__init__(self)
            self.m_ID = ID
            self.m_stop = False
    
        def run(self):
            while not self.m_stop:
                time.sleep(2)
                print 'Thread Object(%d), Time:%s
    ' %(self.m_ID, time.ctime())
    
        def stop(self):
            self.m_stop = True
        
    def test(): #Use thread.start_new_thread() to create 2 new threads
        #thread.start_new_thread(timer1, (5,1))
        #thread.start_new_thread(timer1, (5,2))
        thread1 = timer2(1)
        thread2 = timer2(2)
        thread1.start()
        thread2.start()
        time.sleep(5)
        thread1.stop()
        thread2.stop()
     
    if __name__=='__main__':
        test()
    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。欢迎转载,请注明出处:
    转载自:cococo点点 http://www.cnblogs.com/coder2012
  • 相关阅读:
    北风设计模式课程---行为型模式总结
    北风设计模式课程---21、中介者模式
    kindeditor-网页文字编辑
    CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
    Unreal Engine 4 创建Destructible Mesh(可破坏网格)
    android弹出时间选择框
    mac_Mac环境下怎样编写HTML代码?
    PL/SQL 游标的使用
    [cocos2dx笔记008]cocos2d 用luabridge手动绑定类
    Codeforces Round #274 (Div. 2)
  • 原文地址:https://www.cnblogs.com/coder2012/p/3322196.html
Copyright © 2011-2022 走看看