Найти - Пользователи
Полная версия: Здравствуйте, помогите разбить строку из цифр на несколько строк
Начало » Центр помощи » Здравствуйте, помогите разбить строку из цифр на несколько строк
1
Kuzevanov
Уровень моих знаний самый начальный, помогите пожалуйста. В голову не приходит ничего кроме как реализации на Pyton.
Есть текстовый файл (Input.txt) с набором цифр в одну строку, нужно перенести число на новую строку, через пробел в этой же строке продублировать следующее число и так до конца файла. Количество цифр может рандомно меняться. В итоге вывести полученный результат в текстовый файл (Output.txt)

Имеем такой набор Input.txt 0, 198, 246, 198, 243, 197, 248, 196, 245…

Нужно получить вот такой набор цифр Output.txt

0 198
198 246
246 198
198 243
243 197
197 248
248 196
196 245
245 …
AD0DE412
 with open("input.txt") as f:
    txt = f.read()
seq = txt.split(", ")
out = []
for i in range(len(seq)):
    block = []
    block.append(seq[i])
    try:
        block.append(seq[i + 1])
    except IndexError:
        block.append("")
    out.append(block)
print(out)
py.user.next
Транслирует файл
  
#!/usr/bin/env python3
 
# Для текстового файла (input.txt) с набором цифр в одну строку
# переносит число на новую строку и через пробел в этой же строке
# дублирует следующее число, проходя так до конца файла. Количество
# цифр может меняться рандомно. В итоге выводит полученный результат в
# текстовый файл (output.txt)
# Пример:
# Имеем такой набор в input.txt
# 0, 198, 246, 198, 243, 197, 248, 196, 245 ...
# Получается такой набор в output.txt
# 0 198
# 198 246
# 246 198
# 198 243
# 243 197
# 197 248
# 248 196
# 196 245
# 245 ...
 
def translate(istream, ostream):
    state = 0
    number1 = number2 = ''
    while True:
        ch = istream.read(1)
        if state == 0:
            if ch.isdigit():
                number1 += ch
            else:
                state = 1
        elif state == 1:
            if ch == ',':
                pass
            elif ch == ' ':
                state = 2
            else:
                state = 4
        elif state == 2:
            if ch.isdigit():
                number2 += ch
            elif ch == ',':
                state = 3
            else:
                state = 4
        elif state == 3:
            if ch == ',':
                pass
            elif ch == ' ':
                print(number1, number2, file=ostream)
                number1 = number2
                number2 = ''
                state = 2
        elif state == 4:
            if number2:
                print(number1, number2, file=ostream)
            elif number1:
                print(number1, file=ostream)
            break
 
def process(ifname, ofname):
    with open(ifname, 'r', encoding='utf-8') as fin, \
         open(ofname, 'w', encoding='utf-8') as fout:
        translate(fin, fout)
 
def main():
    ifname = 'input.txt'
    ofname = 'output.txt'
    process(ifname, ofname)
 
if __name__ == '__main__':
    main()

Тут показан пример, когда входной файл повторён 1000 раз. Обрабатывает секунд за пятнадцать.
[guest@localhost linenumseq]$ ll -h
итого 18M
-rw-rw-r--. 1 guest guest 18M фев 9 16:59 input.txt
-rwxr--r--. 1 guest guest 2,1K фев 9 16:55 linenumseq.py
[guest@localhost linenumseq]$ ./linenumseq.py
[guest@localhost linenumseq]$ ll -h
итого 46M
-rw-rw-r--. 1 guest guest 18M фев 9 16:59 input.txt
-rwxr--r--. 1 guest guest 2,1K фев 9 16:55 linenumseq.py
-rw-rw-r--. 1 guest guest 28M фев 9 17:00 output.txt
[guest@localhost linenumseq]$
Kuzevanov
py.user.next
Транслирует файл
Спасибо Вам большое!
Kuzevanov
AD0DE412
Спасибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB