将 readline() 与 Python 一起使用时,如何从列表中删除换行符或空字符串?

How can I remove a newline character or empty string from a list when using readline() with Python?

我想知道如何从列表中删除换行符(或者如果使用 strip 方法,如何删除剩余的空字符串)。这是我到目前为止的代码:

pixel_start = 0
pixel_width = 25
pixel_height = 6
layer_dimension = pixel_width * pixel_height
pixel_end = layer_dimension
layers = []


def get_layer():
    return layer_list[pixel_start:pixel_end]


def increment_layer(pixel_start, pixel_end):
    pixel_start += layer_dimension
    pixel_end += layer_dimension
    return pixel_start, pixel_end


with open('pixel_layers.txt') as layer_file:
    layer_list = layer_file.readline().strip()

while len(layers) <= (len(layer_list) / layer_dimension):
    layers.append(get_layer())
    pixel_start, pixel_end = increment_layer(pixel_start, pixel_end)

layers = layers[:-1]

该文件仅包含一行 1500 个字符和一个换行符。其余代码将该列表分解为包含 100 个项目的列表,每个列表包含 150 个字符。然而,它实际上最终是 101 个项目,因为即使使用 strip 方法,它也会在列表中的第 101 个项目中留下一个空字符串。

我怎样才能避免这种情况?我不想要最终列表中的换行符或空字符串。现在我有最后一行来删除它,但这很丑陋而且根本不正确。

谢谢!

我假设您想从列表 'layers' 中删除多余的最后一个空元素。如果您从 while 循环中删除“=”符号,则可以解决此问题。

while len(layers) < (len(layer_list) / layer_dimension):
    layers.append(get_layer())
    pixel_start, pixel_end = increment_layer(pixel_start, pixel_end)

print(layers)

这是因为,当您 运行 while 循环时,当它没有找到任何字符时,它会在列表中附加一个空字符串,此时计数器 = 10。

要从字符串中删除尾随换行符,您应该使用 layer_file.readline().rstrip('\n')。但是如果你的文件很大并且你知道它的第一个 '\n' 字符的索引你可以稍微简化它:

from itertools import repeat
from math import ceil

pixel_width = 25
pixel_height = 6
layer_dimension = pixel_width * pixel_height
layer_file_length = 1501
layers_max_size =  ceil(layer_file_length / layer_dimension)

with open('pixel_layers.txt', 'tr') as layer_file:
    layers = list(map(layer_file.read, repeat(layer_dimension, layers_max_size)))
    if last_chunk := layers.pop().rstrip('\n'):
        layers.append(last_chunk)

assert len(layers) == 10