删除一些新行,但不是全部用Python

问题描述 投票:0回答:4

我有这种格式的数据

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?非常感谢。

python list foreach newline
4个回答
2
投票

你能尝试以下方法吗?

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']

0
投票

如果每张图片总是有4行,那么您可以像现在这样分割线条 - 然后合并每个第3行和第4行以获得结果


0
投票

完成后,您可以重新遍历数组。

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
投票
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']]
© www.soinside.com 2019 - 2024. All rights reserved.