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