Как найти строку в файле, а затем скопировать их в другой файл - PullRequest
0 голосов
/ 25 марта 2020

У меня есть текстовый файл, который выглядит следующим образом

*test_one 
123xyz
8y9asd
*test_ten
1232nkja
asd1233
*undo_six
asd876
*undo_nine
ase1n4

Я хотел разделить этот файл на два файла, которые должны выглядеть следующим образом.

File1

*test_one 
123xyz
8y9asd
*test_ten
1232nkja

File2

*undo_six
asd876
*undo_nine
ase1n4

Размер файла слишком велик, он может столкнуться с ГБ.

Поскольку итерация построчно будет слишком интенсивной, я хочу знать, могу ли я использовать параметр regex, чтобы сделать это? Если да, может ли кто-нибудь предоставить мне пример кода, как это использовать?

1 Ответ

1 голос
/ 25 марта 2020

Ну, не совсем понятно, как вы решаете разделить данные. Предполагая, что строки, начинающиеся с *, являются своего рода маркером, и вы хотите сгруппировать их по префиксу перед подчеркиванием, вы можете использовать ниже. Он будет создавать новый файл с номером на 1 больше при каждом обнаружении нового префикса, дескриптор файла будет сохранен в dict с использованием префикса в качестве ключа.

затем мы можем записать в файл на основе последнего префикса, который мы видели.

file_num = 0
file_prefix = ""
file_handles = {}

with open("test.txt") as my_file:
    for line in my_file:
        if line.startswith("*"):
            prefix, _ = line.split("_")
            file_prefix = prefix
            if prefix not in file_handles:
                file_num += 1
                file_handles[prefix] = open(f"file{file_num}.txt", "w")
        if file_prefix:
            file_handles[file_prefix].write(line)

for file_handle in file_handles.values():
    file_handle.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...