繁体   English   中英

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

[英]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 个项目。

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

谢谢!

我假设您想从列表“层”中删除额外的最后一个空元素。 如果您从 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM