Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想把一个巨大的文件分割成多个文件,所有分割的文件都有标题。使用python_Python - Fatal编程技术网

我想把一个巨大的文件分割成多个文件,所有分割的文件都有标题。使用python

我想把一个巨大的文件分割成多个文件,所有分割的文件都有标题。使用python,python,Python,假设这是一个大文件的格式,我想把它分成多个指定大小的文件,在每个文件中,我都需要标题(“姓氏”、“吉文名”、“中间名”、“UPIN”、“名称”、“代码”)出现。谢谢 导入操作系统 导入系统 def getfilesize(文件名): 打开(文件名为“rb”)作为fr: fr.seek(0,2)#移动到文件末尾 大小=fr.tell() 打印(“getfilesize:大小:%s”%size) return fr.tell() def拆分文件(文件名、拆分大小): #以只读模式打开原始文件 如果

假设这是一个大文件的格式,我想把它分成多个指定大小的文件,在每个文件中,我都需要标题(“姓氏”、“吉文名”、“中间名”、“UPIN”、“名称”、“代码”)出现。谢谢


导入操作系统
导入系统
def getfilesize(文件名):
打开(文件名为“rb”)作为fr:
fr.seek(0,2)#移动到文件末尾
大小=fr.tell()
打印(“getfilesize:大小:%s”%size)
return fr.tell()
def拆分文件(文件名、拆分大小):
#以只读模式打开原始文件
如果不是os.path.isfile(文件名):
打印(“没有像:\%s\”“%filename这样的文件)
返回
filesize=getfilesize(文件名)
打开(文件名为“rb”)作为fr:
计数器=1
orginalfilename=filename.split(“.”)
readlimit=1000000#一次读取5kb
n_splits=filesize//splitsize
打印(“拆分文件:所需拆分的数目:%s”%str(n_个拆分))
对于范围内的i(n_拆分+1):
chunks\u count=int(splitsize)//int(readlimit)
数据_5kb=fr.read(readlimit)#read
#创建分割文件
打印(“块数:%d”%chunks\u count)
打开(orginalfilename[0]+“{id}.”格式(id=str(计数器))+orginalfilename[1],“ab”)作为fw:
前进搜索(0)
fw.truncate()#如果存在,则截断原始文件
而数据_5kb:
fw.写入(数据_5kb)
如果块\u计数:
块\u计数-=1
数据_5kb=fr.read(读取限制)
其他:休息
计数器+=1
如果名称=“\uuuuu main\uuuuuuuu”:
如果len(sys.argv)<3:print(“未提供文件名或拆分大小:用法:filesplit.py文件名拆分大小链接”)
其他:
filesize=int(sys.argv[2])*1000#转换为kb
filename=sys.argv[1]
拆分文件(文件名、文件大小)
这工作正常,但无法获取标题,很抱歉,我是Stackoverflow新手

这应该可以

import os
import sys

def getfilesize(filename):
   with open(filename,"rb") as fr:
       fr.seek(0,2) # move to end of the file
       size=fr.tell()
       print("getfilesize: size: %s" % size)
       return fr.tell()

def splitfile(filename, splitsize):
   # Open original file in read only mode
   if not os.path.isfile(filename):
       print("No such file as: \"%s\"" % filename)
       return

   filesize=getfilesize(filename)
   with open(filename,"rb") as fr:
    counter=1
    orginalfilename = filename.split(".")
    readlimit = 1000000 #read 5kb at a time
    n_splits = filesize//splitsize
    print("splitfile: No of splits required: %s" % str(n_splits))
    for i in range(n_splits+1):
        chunks_count = int(splitsize)//int(readlimit)
        data_5kb = fr.read(readlimit) # read
        # Create split files
        print("chunks_count: %d" % chunks_count)
        with open(orginalfilename[0]+"_{id}.".format(id=str(counter))+orginalfilename[1],"ab") as fw:
            fw.seek(0) 
            fw.truncate()# truncate original if present
            while data_5kb:                
                fw.write(data_5kb)
                if chunks_count:
                    chunks_count-=1
                    data_5kb = fr.read(readlimit)
                else: break            
        counter+=1 

if __name__ == "__main__":
   if len(sys.argv) < 3: print("Filename or splitsize not provided: Usage:     filesplit.py filename splitsizeinkb ")
   else:
       filesize = int(sys.argv[2]) * 1000 #make into kb
       filename = sys.argv[1]
       splitfile(filename, filesize)
这应该可以

import os
import sys

def getfilesize(filename):
   with open(filename,"rb") as fr:
       fr.seek(0,2) # move to end of the file
       size=fr.tell()
       print("getfilesize: size: %s" % size)
       return fr.tell()

def splitfile(filename, splitsize):
   # Open original file in read only mode
   if not os.path.isfile(filename):
       print("No such file as: \"%s\"" % filename)
       return

   filesize=getfilesize(filename)
   with open(filename,"rb") as fr:
    counter=1
    orginalfilename = filename.split(".")
    readlimit = 1000000 #read 5kb at a time
    n_splits = filesize//splitsize
    print("splitfile: No of splits required: %s" % str(n_splits))
    for i in range(n_splits+1):
        chunks_count = int(splitsize)//int(readlimit)
        data_5kb = fr.read(readlimit) # read
        # Create split files
        print("chunks_count: %d" % chunks_count)
        with open(orginalfilename[0]+"_{id}.".format(id=str(counter))+orginalfilename[1],"ab") as fw:
            fw.seek(0) 
            fw.truncate()# truncate original if present
            while data_5kb:                
                fw.write(data_5kb)
                if chunks_count:
                    chunks_count-=1
                    data_5kb = fr.read(readlimit)
                else: break            
        counter+=1 

if __name__ == "__main__":
   if len(sys.argv) < 3: print("Filename or splitsize not provided: Usage:     filesplit.py filename splitsizeinkb ")
   else:
       filesize = int(sys.argv[2]) * 1000 #make into kb
       filename = sys.argv[1]
       splitfile(filename, filesize)

我用熊猫把大文件分割成小文件

import os

maxlines = 1000  # how many lines did you want each new file to have?
infilepath = 'path/to/file'
with open(infilepath) as infile:
    dirpath = os.path.dirname(infilepath)
    fname = os.path.basename(infilepath)
    fname, ext = fname.rsplit('.',1)

    header = infile.readline()
    outfile = open(os.path.join(dirpath, "{}{}.{}".format(fname, 0, ext)), 'w')

    for i,line in enumerate(infile):
        if not i%maxlines:
            outfile.close()
            outfile = open(os.path.join(dirpath, "{}{}.{}".format(fname, i//maxlines, ext)), 'w')
            outfile.write(header)
        outfile.write(line)

    try: outfile.close()
    except: pass

chunksize
表示输出文件中需要多少行。

我使用pandas将大文件拆分为小文件

import os

maxlines = 1000  # how many lines did you want each new file to have?
infilepath = 'path/to/file'
with open(infilepath) as infile:
    dirpath = os.path.dirname(infilepath)
    fname = os.path.basename(infilepath)
    fname, ext = fname.rsplit('.',1)

    header = infile.readline()
    outfile = open(os.path.join(dirpath, "{}{}.{}".format(fname, 0, ext)), 'w')

    for i,line in enumerate(infile):
        if not i%maxlines:
            outfile.close()
            outfile = open(os.path.join(dirpath, "{}{}.{}".format(fname, i//maxlines, ext)), 'w')
            outfile.write(header)
        outfile.write(line)

    try: outfile.close()
    except: pass


chunksize
表示输出文件中需要多少行。

您尝试过什么吗?请发布您的尝试。另外,您要将这些文件拆分为什么类型的文件?标准是什么,您可以提供示例吗?这里的问题是什么?是否必须使用Python?其他方法可能要快得多。不管怎样,给我们看看你试过什么。我试过这个,效果很好,但我没有得到标题。我会发布我的代码,效果很好,但我无法在我已拆分的文件中获得标题。你试过了吗?请发布您的尝试。另外,您要将这些文件拆分为什么类型的文件?标准是什么,您可以提供示例吗?这里的问题是什么?是否必须使用Python?其他方法可能要快得多。无论如何,告诉我们你尝试过什么。我尝试过这一次,效果很好,但我没有得到标题。我将发布我的代码,效果很好,但我无法获得我已拆分的文件中的标题。感谢inspectorG4dget,但我得到了错误回溯(最近一次调用最后):文件“C:/Users/Henry/Desktop/G_Scripts/Py/split_new.Py”,第7行,在outfile.close()NameError中:未定义名称“outfile”,我是Stackoverflow新手,对python有基本的了解。提前感谢。回溯(最后一次调用):文件“C:/Users/Henry/Desktop/G_Scripts/Py/split_new.Py”,第7行,在outfile.close()name错误:名称“outfile”不是defined@GOU7HAM:哎呀!很抱歉。我现在已经修复了,它工作得很好,但我有一个问题,如果我的文件是('new.txt'),那么所有输出文件名都是('new.txt0','new.txt1','new.txt2','new.txt3',..),除非我使用记事本++,否则无法打开这些文件。非常感谢。请给我建议。我们可以用尺寸来代替行号吗?假设我有一个100MB的文件大小,并且每个文件的大小都是10MB。请推荐我。谢谢@inspectorG4dget。谢谢inspectorG4dget,但我得到了错误回溯(最近一次调用):文件“C:/Users/Henry/Desktop/G_Scripts/Py/split_new.Py”,第7行,在outfile.close()name错误:没有定义名称“outfile”,我是Stackoverflow新手,对python有基本的了解。提前感谢。回溯(最后一次调用):文件“C:/Users/Henry/Desktop/G_Scripts/Py/split_new.Py”,第7行,在outfile.close()name错误:名称“outfile”不是defined@GOU7HAM:哎呀!很抱歉。我现在已经修复了,它工作得很好,但我有一个问题,如果我的文件是('new.txt'),那么所有输出文件名都是('new.txt0','new.txt1','new.txt2','new.txt3',..),除非我使用记事本++,否则无法打开这些文件。非常感谢。请给我建议。我们可以用尺寸来代替行号吗?假设我有一个100MB的文件大小,并且每个文件的大小都是10MB。请推荐我。谢谢@inspectorG4dget。