中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現大文件分割與合并

發布時間:2020-09-30 17:44:03 來源:腳本之家 閱讀:210 作者:Byte貓 欄目:開發技術

很多時候我們會面臨大文件無法加載到內存,或者要傳輸大文件的問題。這時候就需要考慮將大文件分割為小文件進行處理了。

下面是一種用python分割與合并分件的實現。

import os
FILE_DIR = os.path.dirname(os.path.abspath(__file__))

#========================================================
# 文件操作
#========================================================
def get_filelist1(dir, postfix):
  '''
  按照后綴返回文件名列表
  INPUT -> 目錄地址, 文件后綴
  OUTPUT -> 文件名列表
  '''
  return [os.path.join(dir, f) for f in os.listdir(dir) if f.endswith(postfix)]

def get_filelist2(dir, preffix):
  '''
  按照前綴返回文件名列表
  INPUT -> 目錄地址, 文件前綴
  OUTPUT -> 文件名列表
  '''
  return [os.path.join(dir, f) for f in os.listdir(dir) if f.startswith(preffix)]

def get_file_postfix(filename):
  '''
  獲取文件名后綴
  INPUT -> 文件名
  OUTPUT -> 文件后綴
  '''
  file = os.path.splitext(filename)
  preffix, postfix = file
  return postfix

def get_file_preffix(filename):
  '''
  獲取文件名前綴
  INPUT -> 文件名
  OUTPUT -> 文件前綴
  '''
  file = os.path.splitext(filename)
  preffix, postfix = file
  return preffix

def file_chunkspilt(path, filename, chunksize):
  '''
  文件按照數據塊大小分割為多個子文件
  INPUT -> 文件目錄, 文件名, 每個數據塊大小
  '''
  if chunksize > 0:
    filepath = path+'/'+filename
    partnum = 0
    inputfile = open(filepath, 'rb')
    while True:
      chunk = inputfile.read(chunksize)
      if not chunk:
        break
      partnum += 1
      newfilename = os.path.join(path, (filename+'_%04d' % partnum))
      sub_file = open(newfilename, 'wb')
      sub_file.write(chunk)
      sub_file.close()
    inputfile.close()
  else:
    print('chunksize must bigger than 0!')

def file_linespilt(path, filename, limit):
  '''
  文件按照行分割成多個子文件
  INPUT -> 文件目錄, 文件名, 行數
  '''
  if limit > 0:
    preffix = get_file_preffix(filename)
    postfix = get_file_postfix(filename)
    file_count = 0
    l_list = []
    with open(path+'/'+filename, 'rb') as f:
      for line in f:
        l_list.append(line)
        if len(l_list) < limit:
          continue
        subfile = preffix+"_"+str(file_count)+"."+postfix
        with open(FILE_DIR+'/'+subfile, 'wb') as file:
          for l in l_list[:-1]:
            file.write(l)
          file.write(l_list[-1].strip())
          l_list=[]
          file_count += 1
  else:
    print('limit must bigger than 0!')

def file_combine(path, filename):
  '''
  子文件合并
  INPUT -> 文件目錄, 文件名
  '''
  filepath = path+'/'+filename
  partnum = 0
  outputfile = open(filepath, 'wb')
  subfile_list = get_filelist2(FILE_DIR, filename+'_')
  for subfile in subfile_list:
    temp = open(subfile, 'rb')
    outputfile.write(temp.read())
    temp.close()
  outputfile.close()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰城市| 新田县| 拜泉县| 张北县| 溧阳市| 抚宁县| 南宁市| 吕梁市| 清涧县| 射阳县| 澄城县| 绩溪县| 仁怀市| 柏乡县| 惠州市| 都兰县| 普兰店市| 葵青区| 泰州市| 雷州市| 丹凤县| 鄯善县| 鸡泽县| 玉门市| 梓潼县| 潼南县| 平邑县| 江山市| 辉南县| 普定县| 乐清市| 沿河| 安化县| 湖州市| 玉溪市| 平潭县| 富平县| 苏尼特右旗| 呈贡县| 乌兰察布市| 万山特区|