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

你可能感兴趣的:(python)