удалить новую строку, но не все в Python - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть данные в этом формате

Picture
'#Type'
'10', '10'
000000000000000
110000110110000
Picture2
'#Type2'
'10', '10'
000000000000000
110000111110000

Я мог прочитать в файле, используя

sourcefile.read().splitlines() 

но тогда строки 4 и 5 будут двумя элементами в списке. например, список будет

[picture],[#type],[10,10],[000000000000000],[110000110110000],...

Но моя цель - объединить [000000000000000] и [110000110110000], а именно строки 4 и 5, и сделать их одним элементом. Конечный результат будет примерно таким:

[Picture],
['#Type'],
['10', '10'],
[000000000000000110000110110000]

Как мне этого добиться? Еще лучше, как я могу сделать их 4 в виде группы во вложенном списке? Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 01 апреля 2019

Можете ли вы попробовать следующее:

with open('data.txt', 'r') as infile:
    data = infile.read()
split_data = data.split('\n')
req_list = range(3, len(split_data), 5)
flag = False
for ind, val in enumerate(split_data):
    if flag:
        print([split_data[ind-1] + val])
        flag = False
        continue
    if ind not in req_list:
        print([val])
    else:
        flag = True

Выход:

['Picture']
["'#Type'"]
["'10', '10'"]
['000000000000000110000110110000']
['Picture2']
["'#Type2'"]
["'10', '10'"]
['000000000000000110000111110000']
1 голос
/ 01 апреля 2019

Вы можете просто выполнить итерацию по массиву, как только это будет сделано.

arr = sourcefile.read().splitlines() 

Получив массив, вы можете извлечь входные данные длиной более 9 символов

arrOfLargeNumbers = filter(lambda x: len(x) > 9, arr)

Затем удалите старые из массива и добавьте новый

arr.remove(arrOfLargeNumbers[0])
arr.remove(arrOfLargeNumbers[1])
arr.append(f'{arrOfLargeNumbers[0]}{arrOfLargeNumbers[1]}'
0 голосов
/ 01 апреля 2019
with open("path_to_your_input_file", "r") as f:
lines = [line.rstrip() for line in f.readlines()]
new_lines = []
last_was_digit = 0
for i, line in enumerate(lines):
    if line.isdigit() and last_was_digit == 0:
        new_lines.append(["".join([line, lines[i+1]])])
        last_was_digit = 1
    elif last_was_digit == 1:
        last_was_digit = 0
    else:
        new_lines.append([line])

Таким образом, этот код выполняет работу, читая из файла. Это не элегантно, но работает.

Выход:

> [['Picture'], ["'#Type'"], ["'10', '10'"], ['000000000000000110000110110000']
> ['Picture2'], ["'#Type2'"],["'10', '10'"], ['00000000000000011000011111000']]
0 голосов
/ 01 апреля 2019

Если у вас всегда есть 4 строки на изображение, то вы можете разделить строки, как сейчас, - затем объединить каждую 3-ю и 4-ю строку, чтобы получить результат

...