问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

日志文件太大,python怎么分割文件,多线程操作

发布网友 发布时间:2022-04-24 03:08

我来回答

3个回答

懂视网 时间:2022-05-10 20:34

这篇文章主要介绍了Python实现模拟分割大文件及多线程处理的方法,涉及Python文件读取、分割及多线程相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python实现模拟分割大文件及多线程处理的方法。分享给大家供大家参考,具体如下:

#!/usr/bin/env python
#--*-- coding:utf-8 --*--
from random import randint
from time import ctime
from time import sleep
import queue
import threading
class MyTask(object):
 """具体的任务类"""
 def __init__(self, name):
 self.name = name
 self._work_time = randint(1, 5)
 def work(self):
 print("Task %s is start : %s, sleep time= %d" % (self.name, ctime(), self._work_time))
 sleep(self._work_time)
 print("Task %s is end : %s" % (self.name, ctime()))
class MyThread(threading.Thread):
 """多线程的类"""
 def __init__(self, my_queue):
 self.my_queue = my_queue
 super(MyThread, self).__init__()
 def run(self):
 while True:
 if self.my_queue.qsize() > 0:
 self.my_queue.get().work()
 else:
 break
def print_split_line(num=30):
 print("*" * num)
if __name__ == "__main__":
 print_split_line()
 import my_read_file
 # 分割文件
 sf = my_read_file.SplitFiles(r"F:multiple_thread_read_file.txt", line_count=300)
 file_num = sf.split_file()
 queue_length = file_num
 my_queue = queue.LifoQueue(queue_length)
 threads = []
 for i in range(queue_length):
 file_name = sf.get_part_file_name(i)
 mt = MyTask(file_name)
 my_queue.put_nowait(mt)
 for i in range(queue_length):
 mtd = MyThread(my_queue)
 threads.append(mtd)
 for i in range(queue_length):
 threads[i].start()
 for i in range(queue_length):
 threads[i].join()
 print_split_line()

热心网友 时间:2022-05-10 17:42

python的多线程为伪多线程,多线程并不能提高文件IO的速度,在读取文件时使用直接读取 for line in open('文件名', 'r')  效率最高,因为此方式为直接读取,不像其它方式要把文件全部加载到内存再读取,所以效率最高。分割时文件时,提前计算好行数,把读取的每固定数量的行数存入新文件,直接读取完成,最后删除旧文件,即可实现文件分割。

示意代码:

line_count = 0
index = 0
fw = open('part'+str(index)+'.log', 'w')
for line in open('filename.log', 'r'):
    fw.write(line)
    line_count += 1
    # 假设每10000行写一个文件
    if line_count > 10000:
        fw.close()
        index += 1
        fw = open('part'+str(index)+'.log', 'w')
fw.close()

热心网友 时间:2022-05-10 19:00

提供一个思路
Python 的file.readlines()可以添加参数,也就是说你可以用一个线程来读文件,将读取的行数存入某个线程安全容器,其他线程就可以处理这些数据。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mofile里面的视频能下载吗?怎么下? 谁有现在能用的MOFILE网站视频下载方法? MOFILE等视频网站的视频文件怎么下载啊,谢谢大家 mofile如何下载共享文件 怎么使用MOFILE下载视频? ...猪脚在主神空间第一个任务是生化,然后去梦魇空间做卧底,自己有一个... 赣商纵横长三角 想买个金的戒指送给妈妈,价格在2000以内,过年前买好还是年后买好? ...买什么牌子的好,价钱在1500左右,款式简单就好 怀孕晚期能不能吃鹅肉 求助!python文本分割 python字符串分割 python 如何按比例分割文件 python如何拆分含有多种分隔符的字符串 python将图像分割成两半 python字符串分割问题 python 怎么将字符串分割 python数据分割 Python 数组分割 python数组分割? 冰糖炖雪梨有特殊的功效,你是否知道是什么? 冰糖炖雪梨要不要加水 请问有冰糖炖雪梨1 2020年由吴倩 Qian Wu主演的在线免费播放资源 冰糖炖雪梨有哪些功效呢? 做菜什么时候放孜然 冰糖炖雪梨的功效有很多,你都知道哪些? 炒菜时,酱油什么时候放比较合适呀? 冰糖炖雪梨有特殊的功效,你知道有哪些吗? 炒菜时调料什么时候放最合适 家里做菜时,什么时候需要放蒜? python 数组切割 python 分割数字串 利用python进行文本分割,每三行分成一个新文件 使用python进行大型文本的分割 关于python中文件的分割 使用Python按字节分割字符串 怎么注销12306账号? 微信红包怎样撤底删除? 手机号被别人注册了铁路12306的账号,该如何注销? 如何把微信的红包撤销 铁路e卡通注册了怎么才能注销? 怎么把微信红包收回来 录影时间和播放时间 当兵新兵连三个月都训练什么科目 新兵训练三个月都训练什么?都有什么标准? 大专及以上学历提供学历证书电子注册备案表单位准备这个是什么意思 当兵新兵连三个月都训练什么科目? 非全日制大专怎么办理《教育部学历证书电子注册备案表》或《中国高等教育学历认证报告_百度问一问 建行卡扣款记录显示财富通微信零钱充值,微信又没有记录? 新兵连三个月训练什么?