python进程实例

需要用到的一些知识:

1.open() 文件操作

open(路径+文件名,读写模式)
f=open(‘/tmp/hello’,’w’)

读写模式:r只读, r+读写, w新建(会覆盖原有文件) ,a追加, b二进制文件. 常用模式

如:’rb’,’wb’,’r+b’等等
读写模式的类型有:

rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )

注意:
1、使用’W’,文件若存在,首先要清空,然后(重新)创建,
2、使用’a’模式 ,把所有要写入文件的数据都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,将自动被创建。
f.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回”“(空字串)

file.readline() 返回一行

file.readline([size]) 返回包含size行的列表,size 未指定则返回全部行

for line in f: print line #通过迭代器访问

f.write(“hello\n”) #如果要写入字符串以外的数据,先将他转换为字符串.

f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).

f.seek(偏移量,[起始位置]) 用来移动文件指针

偏移量:单位:比特,可正可负

起始位置:0-文件头,默认值;1-当前位置;2-文件尾

f.close() 关闭文件

2.python strip()函数

声明:s为字符串,rm为要删除的字符序列

s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符

s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

注意:

  1. 当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ‘)
  2. 这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉。

3.python读取文件时提示:

“UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 205: illegal multibyte sequence”

解决办法1.
FILE_OBJECT= open(‘order.log’,’r’, encoding=’UTF-8’)
解决办法2.
FILE_OBJECT= open(‘order.log’,’rb’)

代码示例:

# 并行处理某个目录下文件中的字符个数和行数,存入res.txt文件中, 
# 每个文件一行,格式为:filename:lineNumber,charNumber

import os
import time
from multiprocessing import Pool

def getFile(path) :  
  #获取目录下的文件list
  fileList = []
  for root, dirs, files in list(os.walk(path)) :  # 遍历path下的所有文件
    for i in files:
      if i.endswith('.py'):
        fileList.append(root + "\\" + i)  # 得到了完整的路径
  # print(fileList) # 打印符合条件的文件
  return (fileList)  # 打印符合条件的文件

def operFile(filePath) : 
  #统计每个文件中行数和字符数,并返回
  with open(filePath,'r',encoding='utf-8') as f:  # 以utf-8统一的编码格式
    content=f.readlines()    
  lines = len(content)  
  alphaNum = 0
  for i in content :
    alphaNum += len(i.strip('\n'))  
  return filePath,lines,alphaNum

def out(list1, writeFilePath) :
  #将统计结果写入结果文件中
  fileLines = 0
  charNum = 0
  with open(writeFilePath,'a') as fp:  # 以追加的模式
    for i in list1 :
      # 写入的第一个参数是path,第二个是行数,第三个是字符数
      # 使用'w',文件若存在,首先要清空,然后(重新)创建
      fp.write(i[0] + " 行数:"+ str(i[1]) + " 字符数:"+str(i[2]) + "\n")
      fileLines += i[1]
      charNum += i[2]  
  print ('总的行数:',fileLines)
  print ('总的字符数:',charNum)

if __name__ == "__main__":  
  #创建多个进程去统计目录中所有文件的行数和字符数
  startTime = time.time()
  filePath = 'C:\\Users\\LiLong\\Desktop\\python日常'
  fileList = getFile(filePath)  
  pool = Pool(5)  # 创造一个进程池,并且最多能容纳5个进程
  resultList =pool.map(operFile, fileList)  
  pool.close()
  pool.join()
  # 写入文件的路径
  writeFilePath = "C:\\Users\\LiLong\\Desktop\\process\\rex.txt"
  print(resultList)  
  out(resultList, writeFilePath)  
  endTime = time.time()
  print("used time is ", endTime - startTime)

运行结果:
《python进程实例》

《python进程实例》

参考:

http://www.cnblogs.com/dkblog/archive/2011/02/24/1980651.html
http://blog.csdn.net/seetheworld518/article/details/49639651

    原文作者:lilong117194
    原文地址: https://blog.csdn.net/lilong117194/article/details/74923616
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞