Быстрый способ добавить номер строки / строки в текстовый файл

У меня есть файл, который имеет около 12 миллионных строк, каждая строка выглядит так:

0701648016480002020000002030300000200907242058CRLF

То, что я пытаюсь сделать, это добавить номера строк перед данными, числа должны иметь фиксированную длину.

Идея этого заключается в том, чтобы выполнить массовую вставку этого файла в таблицу SQLServer, а затем выполнить с ней определенные операции, которые требуют, чтобы каждая строка имела уникальный идентификатор. Я пытался сделать это на стороне базы данных, но я не смог добиться хорошей производительности (по крайней мере, менее 4'и менее 1' было бы идеально).

Сейчас я пытаюсь найти решение на python, которое выглядит примерно так.

file=open('file.cas', 'r')
lines=file.readlines()
file.close()
text = ['%d %s' % (i, line) for i, line in enumerate(lines)]
output = open("output.cas","w")
output.writelines(str("".join(text)))
output.close()

Я не знаю, сработает ли это, но это поможет мне понять, как это будет работать, и побочные эффекты, прежде чем я продолжу пробовать что-то новое, я также подумал сделать это на C, чтобы лучше контролировать память.

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

Спасибо

3 ответа

Решение

О боже, не читайте сразу все 12 миллионов строк! Если вы собираетесь использовать Python, по крайней мере, сделайте это так:

file = open('file.cas', 'r')
try:
    output = open('output.cas', 'w')
    try:
        output.writelines('%d %s' % tpl for tpl in enumerate(file))
    finally:
        output.close()
finally:
    file.close()

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

Стефано прав:

$ time cat -n file.cas> output.cas

Используйте время, чтобы увидеть, как быстро. Это будет быстрее, чем python, так как cat - это чистый C-код.

Почему бы тебе не попробовать cat -n?

Другие вопросы по тегам