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\n'%(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\n'%(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\n' %(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
posted @ 2013-09-15 11:14  cococo点点  阅读(8495)  评论(1编辑  收藏  举报