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面相对象编程中对象的属性与类的方法
Jan 19 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
python ddt实现数据驱动
Mar 14 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
python中 * 的用法详解
Jul 10 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
对Django外键关系的描述
Jul 26 Python
Django展示可视化图表的多种方式
Apr 08 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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中文件上传的安全问题
2006/10/09 PHP
dedecms中常见问题修改方法总结
2007/03/21 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
yii操作cookie实例简介
2014/07/09 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python3设计模式之简单工厂模式
2017/10/17 Python
Python实现Event回调机制的方法
2019/02/13 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
大学生入党思想汇报
2014/01/01 职场文书
期末自我鉴定
2014/01/23 职场文书
董事长秘书职责
2014/01/31 职场文书
双方协议书
2014/04/22 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
公司人事管理制度
2015/08/05 职场文书
房产遗嘱范本
2015/08/06 职场文书
Python读写yaml文件
2022/03/20 Python