使用Python根据关键词将文件拆分为多个文件

3
我有一个大的Python文本文件。我想使用关键字将其分成两个文件。在关键字上面的文件必须被复制到一个文件中,其余部分则复制到另一个文件中。我希望在同一个目录中使用不同的扩展名保存这些文件。请帮助我完成这个任务。
此外,如何将一个文件从一种格式转换为另一种格式?例如,从.txt转换为.xml或从.cite转换为.xml?

嗨,请编辑您的问题,分享您已经尝试过的任何代码,以及您在此方面所做的任何研究但没有帮助的内容。 - undefined
谷歌搜索文件管理。此外,考虑将整个文件加载为文本,并使用text.split(keyword) - 这将把它分割成两个字符串,然后您可以将它们保存为不同的文件。 - undefined
2个回答

1
要回答你问题的第一部分,你可以在读取文本后使用split函数并将它们写入新文件中:
with open('oldfile.txt', 'r') as fh:
    text_split = fh.read().split(keyword)

with open('newfile' + extension1, 'w') as fh:
    fh.write(text_split[0])

with open('newfile' + extension2, 'w') as fh:
    # If you know that the keyword only appears once
    # you can changes this to fh.write(text_split[1])
    fh.write(keyword.join(text_split[1:]))

您的第二个问题要困难得多。我不知道您正在使用哪种文件格式,但txt文件只是没有特定结构的纯文本。XML文件不能从任意格式转换。如果您正在使用具有.txt格式的XML文件,则可以简单地将格式更改为XML,但如果您想要转换像CSV这样的格式,则建议您使用库,如lxml
编辑:如果文件无法适应内存,则可以迭代处理行:
with open('oldfile.txt', 'r') as fh:
    fh_new = open('newfile' + extension1, 'w')
    keyword_found = False
    line = fh.readline()
    while line:
        if not keyword_found:
            text_split = line.split(keyword)
            fh_new.write(text_split[0])
            if len(text_split) > 1: 
                fh_new.close()
                keyword_found = True
                fh_new = open('newfile' + extension2, 'w')
                fh_new.write(text_split[1:])
        else:
            fh_new.write(line)

        line = fh.readline()
    fh_new.close()

你的文件分割方案对于那些太大而无法一次性载入内存的文件来说并不是一个好主意。他说他有一个很大的文件。 - undefined
@kamyarhaqqani如果您有任何高效解决方案的建议,请告诉我。那真的很有帮助。谢谢! - undefined
@Bharath kumar k 我已经发布了一个答案。 - undefined
我已经更新了答案,并提供了一个解决方案,如果你的文件无法放入内存中。 - undefined

-1
关于拆分文件,这应该可以解决(考虑到文件的大小):
import mmap
regex=b'your keyword'
f=open('your_path_to_the_main_file','rb')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
first_occurance_position=s.find(regex)
if(first_occurance_position==0)
 print('this is a mistake')
 f.close()
 quit()

buf_size=0xfff
first_part_file=open('your_path_to_the_first_part'+'.its_extension','wb')
second_part_file=open('your_path_to_the_second_part'+'.its_extension','wb')
i=0;
if(buf_size>len(regex)):
 buf_size=len(regex)
b=f.read(buf_size)
while(b):
 i=i+buf_size
 first_part_file.write(b)
 if(i==first_occurance_position):
  break
 if(first_occurance_position-i<buf_size):
  buf_size=first_occurance_position-i
 b=f.read(buf_size)

b=f.read(0xffff)
while(b):
 second_part_file.write(b)
 b=f.read(0xffff)

first_part_file.close()
second_part_file.close()
f.close()

谢谢你的回答。它与逐行复制直到找到关键字,然后将剩余部分复制到其他文件有何不同?我可以知道它为什么更高效吗? - undefined
你并没有要求一个比你提到的更高效的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接