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