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 inalllines:print eachline;
使用文件迭代器 ,每次只读取和显示一行:
fp=open("./output.txt", "r");for eachline infp:print eachline;
读取和保存CSV文件,使用CSV模块
importcsvdefloadFile(file_name):
f=open(file_name)
r=csv.reader(f)for item inr:printitem
type=sys.getfilesystemencoding()for line inr:defsaveFile(result):
writer= csv.writer(open('result.csv','w'), dialect='excel')for item inresult:
writer.writerow(item)
多线程
由于程序数据有点大,尝试一下Python的多线程,其实和C++/JAVA都是类似的
调用thread模块中的start_new_thread()函数来产生新线
importtimeimportthreaddeftimer(n, ID):
cnt=0while cnt
cnt+=1thread.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(),检查线程是否在运行中。
importtimeimportthreadimportthreadingdeftimer1(n, ID):
cnt=0while cnt
cnt+=1thread.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=Falsedefrun(self):while notself.m_stop:
time.sleep(2)print 'Thread Object(%d), Time:%s\n' %(self.m_ID, time.ctime())defstop(self):
self.m_stop=Truedef 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()