python分割文件的常用方法


Posted in Python onNovember 01, 2014

本文大家整理了一些比较好用的关于python分割文件的方法,方法非常的简单实用。分享给大家供大家参考。具体如下:

例子1 指定分割文件大小

配置文件 config.ini:

[global]

#原文件存放目录

dir1=F:\work\python\3595\pyserver\test

#新文件存放目录

dir2=F:\work\python\3595\pyserver\test1

python 代码如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import os,sys,ConfigParser

class file_openate(object):

def __init__(self):

    #初如化读取数据库配置

    dir_config = ConfigParser.ConfigParser()

    file_config=open('config.ini',"rb")

    dir_config.readfp(file_config)

    self.dir1=str(dir_config.get("global","dir1"))

    self.dir1=unicode(self.dir1,'utf8')

    self.dir2=str(dir_config.get("global","dir2"))

    self.dir2=unicode(self.dir2,'utf8')

    file_config.close()

#print self.dir2

#self.dir1="F:\\work\\python\\3595\\pyserver\\test"

def file_list(self):

    input_name_han="软件有不确认性,前期使用最好先备份,以免发生数据丢失,确认备份后,请输入要分割的字节大小,按b来计算".decode('utf-8')

    print input_name_han

    while 1:

input_name=raw_input("number:")

if input_name.isdigit():

    input_name=int(input_name)

    os.chdir(self.dir1)

    for filename in os.listdir(self.dir1):

os.chdir(self.dir1)

#print filename

name, ext = os.path.splitext(filename)

file_size=int(os.path.getsize(filename))

f=open(filename,'r')

chu_nmuber=0

while file_size >= 1:

    #print file_size

    chu_nmuber=chu_nmuber + 1

    if file_size >= input_name:

file_size=file_size - input_name

a=f.read(input_name)

os.chdir(self.dir2)

filename1=name + '-' + str(chu_nmuber) + ext

new_f=open(filename1,'a')

new_f.write(a)

new_f.close()

#print file_size

    else:

a=f.read()

os.chdir(self.dir2)

filename1=name + '-' + str(chu_nmuber) + ext

new_f=open(filename1,'a')

new_f.write(a)

new_f.close()

break

print "分割成功".decode('utf-8') + filename

f.close()

else:

    print "请输入正确的数字,请重新输入".decode('utf-8')

file_name=file_openate()

file_name.file_list()

例子2,按行分割文件大小

#!/usr/bin/env python

#--*-- coding:utf-8 --*--

import os

class SplitFiles():

    """按行分割文件"""

    def __init__(self, file_name, line_count=200):

        """初始化要分割的源文件名和分割后的文件行数"""

        self.file_name = file_name

        self.line_count = line_count

    def split_file(self):

        if self.file_name and os.path.exists(self.file_name):

            try:

                with open(self.file_name) as f : # 使用with读文件

                    temp_count = 0

                    temp_content = []

                    part_num = 1

                    for line in f:

                        if temp_count < self.line_count:

                            temp_count += 1

                        else :

                            self.write_file(part_num, temp_content)

                            part_num += 1

                            temp_count = 1

                            temp_content = []

                        temp_content.append(line)

                    else : # 正常结束循环后将剩余的内容写入新文件中

                        self.write_file(part_num, temp_content)

            except IOError as err:

                print(err)

        else:

            print("%s is not a validate file" % self.file_name)

    def get_part_file_name(self, part_num):

        """"获取分割后的文件名称:在源文件相同目录下建立临时文件夹temp_part_file,然后将分割后的文件放到该路径下"""

        temp_path = os.path.dirname(self.file_name) # 获取文件的路径(不含文件名)

        part_file_name = temp_path + "temp_part_file"

        if not os.path.exists(temp_path) : # 如果临时目录不存在则创建

            os.makedirs(temp_path)

        part_file_name += os.sep + "temp_file_" + str(part_num) + ".part"

        return part_file_name

    def write_file(self, part_num, *line_content):

        """将按行分割后的内容写入相应的分割文件中"""

        part_file_name = self.get_part_file_name(part_num)

        print(line_content)

        try :

            with open(part_file_name, "w") as part_file:

                part_file.writelines(line_content[0])

        except IOError as err:

            print(err)

if __name__ == "__main__":

    sf = SplitFiles(r"F:\multiple_thread_read_file.txt")

    sf.split_file()

上面只是进行了分割了,如果我们又要合并怎么办呢?下面这个例子可以实现分割与合并哦,大家一起看看。

例子3, 分割文件与合并函数

#!/usr/bin/python

##########################################################################

# split a file into a set of parts; join.py puts them back together;

# this is a customizable version of the standard unix split command-line 

# utility; because it is written in Python, it also works on Windows and

# can be easily modified; because it exports a function, its logic can 

# also be imported and reused in other applications;

##########################################################################

      

import sys, os

kilobytes = 1024

megabytes = kilobytes * 1000

chunksize = int(1.4 * megabytes)   # default: roughly a floppy

      

def split(fromfile, todir, chunksize=chunksize): 

    if not os.path.exists(todir):  # caller handles errors

os.mkdir(todir)    # make dir, read/write parts

    else:

for fname in os.listdir(todir):    # delete any existing files

    os.remove(os.path.join(todir, fname)) 

    partnum = 0

    input = open(fromfile, 'rb')   # use binary mode on Windows

    while 1:       # eof=empty string from read

chunk = input.read(chunksize)      # get next part <= chunksize

if not chunk: break

partnum  = partnum+1

filename = os.path.join(todir, ('part%04d' % partnum))

fileobj  = open(filename, 'wb')

fileobj.write(chunk)

fileobj.close()    # or simply open().write()

    input.close()

    assert partnum <= 9999 # join sort fails if 5 digits

    return partnum

     

if __name__ == '__main__':

    if len(sys.argv) == 2 and sys.argv[1] == '-help':

print 'Use: split.py [file-to-split target-dir [chunksize]]'

    else:

if len(sys.argv) < 3:

    interactive = 1

    fromfile = raw_input('File to be split? ')       # input if clicked 

    todir    = raw_input('Directory to store part files? ')

else:

    interactive = 0

    fromfile, todir = sys.argv[1:3]  # args in cmdline

    if len(sys.argv) == 4: chunksize = int(sys.argv[3])

absfrom, absto = map(os.path.abspath, [fromfile, todir])

print 'Splitting', absfrom, 'to', absto, 'by', chunksize

      

try:

    parts = split(fromfile, todir, chunksize)

except:

    print 'Error during split:'

    print sys.exc_info()[0], sys.exc_info()[1]

else:

    print 'Split finished:', parts, 'parts are in', absto

if interactive: raw_input('Press Enter key') # pause if clicked

join_file.py
 

#!/usr/bin/python

##########################################################################

# join all part files in a dir created by split.py, to recreate file.  

# This is roughly like a 'cat fromdir/* > tofile' command on unix, but is 

# more portable and configurable, and exports the join operation as a 

# reusable function.  Relies on sort order of file names: must be same 

# length.  Could extend split/join to popup Tkinter file selectors.

##########################################################################

      

import os, sys

readsize = 1024

      

def join(fromdir, tofile):

    output = open(tofile, 'wb')

    parts  = os.listdir(fromdir)

    parts.sort()

    for filename in parts:

filepath = os.path.join(fromdir, filename)

fileobj  = open(filepath, 'rb')

while 1:

    filebytes = fileobj.read(readsize)

    if not filebytes: break

    output.write(filebytes)

fileobj.close()

    output.close()

      

if __name__ == '__main__':

    if len(sys.argv) == 2 and sys.argv[1] == '-help':

print 'Use: join.py [from-dir-name to-file-name]'

    else:

if len(sys.argv) != 3:

    interactive = 1

    fromdir = raw_input('Directory containing part files? ')

    tofile  = raw_input('Name of file to be recreated? ')

else:

    interactive = 0

    fromdir, tofile = sys.argv[1:]

absfrom, absto = map(os.path.abspath, [fromdir, tofile])

print 'Joining', absfrom, 'to make', absto

      

try:

    join(fromdir, tofile)

except:

    print 'Error joining files:'

    print sys.exc_info()[0], sys.exc_info()[1]

else:

   print 'Join complete: see', absto

if interactive: raw_input('Press Enter key') # pause if clicked

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python  连接字符串(join %)
Sep 06 Python
Python中Django框架利用url来控制登录的方法
Jul 25 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
Python3中bytes类型转换为str类型
Sep 27 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
wxPython实现整点报时
Nov 18 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
详解Python yaml模块
Sep 23 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
python 三种方法提取pdf中的图片
Feb 07 Python
跟老齐学Python之通过Python连接数据库
Oct 28 #Python
Python对象体系深入分析
Oct 28 #Python
Python中类的继承代码实例
Oct 28 #Python
Python列表list数组array用法实例解析
Oct 28 #Python
python实现无证书加密解密实例
Oct 27 #Python
深入理解Python 代码优化详解
Oct 27 #Python
简单的Python抓taobao图片爬虫
Oct 26 #Python
You might like
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
举例介绍Python中的25个隐藏特性
2015/03/30 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
python3.6数独问题的解决
2019/01/21 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
python实现同一局域网下传输图片
2020/03/20 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Oracle的内存结构(Memory structures)
2015/06/10 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
2014年终个人工作总结
2014/11/07 职场文书
独生子女证明范本
2015/06/19 职场文书
公司人力资源管理制度
2015/08/05 职场文书
python_tkinter事件类型详情
2022/03/20 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python