【问题标题】:How can I remove a newline character or empty string from a list when using readline() with Python?将 readline() 与 Python 一起使用时,如何从列表中删除换行符或空字符串?
【发布时间】:2019-12-10 06:23:06
【问题描述】:

我想知道如何从列表中删除换行符(或者如果使用了 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 项。

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

谢谢!

【问题讨论】:

  • 您能否提供一个缩写(比如 300 个左右的字符,所以只有前两个项目)版本的输入,以便我们自己对此进行试验?这个问题对我来说不是很明显。
  • 在你的例子中len(layer_list) / layer_dimension 接近10,所以你的len(layers) 不能超过10
  • 我不知道如何附加文件,但在这里是第300个值:221002222122020222021022222022222222222222222222221222222022220222112022220222022020222202222222220222222222221222212222222222222222222222222222022222220202222122121222022122222122222222222222222222222222222022221222102022221222122220222202222222220222222222222222202222222222222222222222222222222222 SPAN>

标签: python string newline


【解决方案1】:

我假设您想从列表“层”中删除多余的最后一个空元素。如果您从 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 时它没有找到任何字符时,它会在列表中附加一个空字符串。

【讨论】:

    【解决方案2】:

    要从字符串中删除尾随换行符,您应该使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多