各位用户为了找寻关于Python实现分割文件及合并文件的方法的资料费劲了很多周折。这里教程网为您整理了关于Python实现分割文件及合并文件的方法的相关资料,仅供查阅,以下为您介绍关于Python实现分割文件及合并文件的方法的详细内容
本文实例讲述了Python实现分割文件及合并文件的方法。分享给大家供大家参考。具体如下:
分割文件split.py如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53#!/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如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44#!/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程序设计有所帮助。