使用文本delimi将25mb.txt文件拆分为更小的文件

2024-09-28 20:59:21 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,所以

我不熟悉python和Perl。我一直在试图解决一个简单的问题,却与语法纠结在一起。我希望有人有时间和耐心来帮忙。 我有一个25mb的“.txt”格式的文件,其中包含1970年的新闻通讯文章。每个新闻故事都被连接到下一个新闻故事,只有“版权”声明来界定。每个新闻故事都以“XXX文档的第XX项”开头。有一些元数据在整个过程中都是重复的,稍后我将使用这些元数据进行标记。在

我希望将这个25mb的文件分成单独的.txt文件,每个文件包含一个新闻故事(即“文档”和“版权”之间的文本),并用不同的名称保存(显然)。在

我正试着打开文件。。。2) 迭代文件中的行,检查是否有eof分隔符,如果不存在,则将该行写入列表3)将该列表写入单独的小文件。在

我在使用计数器更改文件名时遇到了很大的问题,如何让Python从我停止的地方开始,“seek”函数是否合适?在

到目前为止,我一直在尝试这种方法,但完全没有成功:

myfile = open ("myfile.txt", 'r')
filenumber = 0
for line in myfile.readline():  
    filenumber += 1    
    w=0  
    while myfile.readline() != '\s+DOCUMENTS\s*\n'  
    ### read my line into a list  
    mysmallfile()['w'] = [myfile.readline()]  
    w += 1  
    output = open('C:\\Users\\dunner7\\Documents\###how do I change the filename      each     iteration???', 'w')  
    output.writelines(mysmallfile)   
    ###go back to start.   

谢谢你的时间和耐心。在

研发

以下是文本文件的示例:

^{pr2}$

卫生及公众服务部(HHS);食品和药物管理局(FDA) (F.R.第72832页)召开 医疗器械咨询委员会讨论并提出建议 用于电休克的设备可能的重新分类 治疗,1月27-28日。在

时间:上午8点

地点:希尔顿华盛顿特区北/盖瑟斯堡,舞厅,佩里公园路620号, 马里兰州盖瑟斯堡

联系人:James Engles,800-741-8138[注:使用代码:3014512513,当 询问信息。]

装货日期:2010年11月28日

语言:英语

类型:会议

       Copyright 2011 Federal Information and News Dispatch, Inc.


                           2 of 575 DOCUMENTS

                         The Washington Daybook

                            January 27, 2011

卫生及公众服务部(HHS);食品和药物管理局(FDA) (F.R.第72832页)召开 医疗器械咨询委员会讨论并提出建议 用于电休克的设备可能的重新分类 治疗,1月27-28日。在

时间:上午8点

地点:希尔顿华盛顿特区北/盖瑟斯堡,舞厅,佩里公园路620号, 马里兰州盖瑟斯堡

联系人:James Engles,800-741-8138[注:使用代码:3014512513,当 询问信息。]

装货日期:2010年11月28日

语言:英语

类型:会议

       Copyright 2011 Federal Information and News Dispatch, Inc.


                           3 of 575 DOCUMENTS


                              FNS DAYBOOK

                       January 12, 2011 Wednesday
                              FUTURE EVENTS

活动:会议-卫生及公众服务部(HHS);食品和药品 管理局(FDA)(F.R.第72832页); 地点:希尔顿华盛顿特区北/盖瑟斯堡,舞厅,佩里公园路620号, 马里兰州盖瑟斯堡——2011年1月27日上午8:00

章节:联邦机构和部门-未来

长度:72字

主题:卫生及公众服务署;食物及药物 管理局(FDA)(F.R.第72832页)召开神经学会议 医疗器械谘询委员会设备事务委员会讨论 关于设备可能重新分类的建议 用于电休克治疗,1月27日至28日。在

联系人:James Engles,800-741-8138[注:使用代码:3014512513,当 询问信息。]

装货日期:2011年1月10日

语言:英语

发布类型:事件日程表

                  Copyright 2011 Federal News Service
                          All Rights Reserved

Tags: 文件txtreadline时间会议myfile新闻documents
2条回答

一路上的几个问题:

  • 当写入一个小文件时,您在循环迭代器中都使用了myfile.readline(),如果您想知道当前行的内容,只需使用line
  • myfile.readline() != 'string'位总是会失败,这实际上不是regexp匹配。在
  • mysmallfile()['w']看起来太聪明了(如果使用mysmallfile()函数返回索引为“w”的数组或字典来检索L值(!)或者你在这里偏离了方向:)
  • 你打开一个文件,在其中写一行,但永远不要关闭文件。这是当您用完打开的文件描述符时在1000行之后失败的秘诀。在

nosklo的建议中包含了很多清理工作,我希望我的帖子能帮助你理解他是如何做到的。:)

像这样:

filenumber = 0
outfile = None
with open('source_file.txt') as f:
    for line in f:
        if line.strip() == 'DOCUMENTS':
            filenumber += 1
            outfile = open('result%03d.txt' % filenumber, 'w')
        elif line.strip().startswith('Copyright') and outfile:
            outfile.close()
            outfile = None
        elif outfile:
            outfile.write(line)
if outfile:
    outfile.close()

我不得不猜测很多事情,因为我不知道文件的样子。如果有进一步的问题,请发布该文件。在

相关问题 更多 >