簡體   English   中英

使用文本定界符將25mb .txt文件拆分為較小的文件

[英]Splitting 25mb .txt file into smaller files using text delimiter

問候,所以

我是python和Perl的新手。 我一直在嘗試解決一個簡單的問題,並在語法上打結。 我希望有人有時間和耐心來提供幫助。 我有一個25mb的文件,其格式為“ .txt”,其中包含可追溯到1970年的新聞專線文章。每個新聞故事都串聯到下一個新聞報道中,僅用“ Copyright”語句來定界。 每個新聞故事都以“ XXX DOCUMENTS項XX”開頭。 某些重復的元數據會在整個過程中重復,稍后我將使用它們進行標記。

我希望將這個25mb的文件拆分為單獨的.txt文件,每個文件包含一個新聞報道(即“ DOCUMENTS”和“ Copyright”之間的文本,並用不同的名稱保存(顯然)。

我正在嘗試1)打開文件... 2)遍歷文件中的行以檢查eof分隔符,如果不存在,則將該行寫入列表3)將該列表寫入單獨的小文件。

我在使用計數器更改文件名時遇到了大問題,如何使Python從我中斷的地方開始,“搜索”功能是否合適?

到目前為止,我一直在嘗試這種方法,但完全沒有成功:

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.   

感謝您的時間和耐心等待。

RD

這是文本文件的示例:

                           1 of 575 DOCUMENTS

                         The Washington Daybook

                            January 28, 2011

衛生及公眾服務部(HHS); 食品和葯物管理局(FDA)(FR第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)(FR第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)(FR PAGE 72832); 地點:馬里蘭州蓋瑟斯堡佩里公園路620號,華盛頓特區北/蓋瑟斯堡希爾頓酒店,2011年1月27日上午8:00

部分:聯邦機構和部門-未來

長度:72個字

主題:衛生和公共服務部(HHS); 食品和葯物管理局(FDA)(FR第72832頁)於1月27日至28日舉行了醫療設備咨詢委員會神經設備小組會議,以討論和建議用於電痙攣治療的設備可能的重新分類。

聯系人:James Engles,電話:800-741-8138 [注意:致電時,請使用代碼:3014512513。

加載日期:2011年1月10日

英語語言

出版物類型:活動時間表

                  Copyright 2011 Federal News Service
                          All Rights Reserved

像這樣:

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()

我不得不猜測很多事情,因為我完全不知道文件的外觀。 如果您還有其他問題,請發布文件。

一路走來的幾個問題:

  • 您正在使用myfile.readline()在兩個循環迭代寫入小文件時-只使用line ,當你想知道當前行的內容
  • myfile.readline() != 'string'位總是會失敗,這實際上不是regexp匹配。
  • mysmallfile()['w']看起來過於聰明(如果您正在使用mysmallfile()函數返回以'w'索引的數組或字典來檢索L值(!)),或者您只是這樣當然偏離這里:)
  • 您打開一個文件,在其中寫入一行,但是從不關閉該文件。 這是在用完打開的文件描述符后1000行后失敗的方法。

nosklo的建議有很多清理工作,我希望我的帖子可以幫助您了解他如何找到他。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM