python 多线程读写文件_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 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值