разбиение файла на несколько файлов с помощью ключевого слова с использованием Python

1

У меня есть большой текстовый файл в python. Я хочу разбить его на 2, используя ключевое слово. Файл над ключевым словом должен быть скопирован в один файл, а остальная часть файла - в другую. Я хочу сохранить эти файлы с разными расширениями в том же каталоге. Пожалуйста, помогите мне с этим.

Также, как преобразовать файл из одного формата в другой формат? Например,.txt в.xml или.cite в.xml?

  • 0
    Здравствуйте, пожалуйста, отредактируйте свой вопрос, чтобы поделиться любым кодом, который вы уже пробовали, а также любыми исследованиями, которые вы сделали по этому поводу, которые не помогли.
  • 0
    Google для управления файлами. Кроме того, рассмотрите возможность загрузки всего файла в виде текста и использования text.split (ключевое слово) - это разделит его на 2 строки, и вы можете просто сохранить их как разные файлы.
Теги:
file
split

2 ответа

0

Чтобы ответить на первую часть вашего вопроса, вы можете просто использовать функцию 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 файлы не могут быть преобразованы из произвольного формата. Если вы работаете с XML файлами с форматом.txt, вы можете просто изменить формат на 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()
  • 0
    Ваше решение разделить файл - плохая идея для файлов, достаточно больших, чтобы не помещаться в память сразу. он сказал, что у него есть большой файл.
  • 0
    @ kamyarhaqqani, если у вас есть предложения по эффективным решениям, пожалуйста, дайте мне знать. Это было бы действительно полезно. Спасибо чувак!
Показать ещё 2 комментария
-2

о разделении вашего файла это должно сделать это (учитывая масштабность файла):

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

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;
b=f.read(1)
while(b):
 i=i+1
 first_part_file.write(b)
 if(i==first_occurance_position):
  break
 b=f.read(1)

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()
  • 0
    Спасибо за ответ. Чем он отличается от копирования каждой строки до тех пор, пока мы не получим ключевое слово, а затем скопировать остальное в какой-то другой файл? Могу ли я узнать, насколько это эффективно?
  • 0
    Вы не просили более эффективного ответа, чем вы упомянули.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню