Python从列表中的所有条目中删除所有空格

4

当我在一个.srt文件上调用readlines()时,我得到了一个字符列表,其中有很多前导和尾随的空格,如下所示

with open(infile) as f:
    r=f.readlines()
    return r

我得到了这个列表。
['\xef\xbb\xbf1\r\n', '00:00:00,000 --> 00:00:03,000\r\n', "[D. Evans] Now that you've written your first Python program,\r\n",'\r\n', '2\r\n', '00:00:03,000 --> 00:00:06,000\r\n', 'you might be wondering why we need to invent new languages like Python\r\n', '\r\n']

我仅仅为了简洁起见只包含了一些元素。我该如何清理这个列表,以便我可以移除所有的空白字符,并获取只包含相关元素的内容?

 ['1','00:00:00,000 --> 00:00:03,000',"[D. Evans] Now that you've written your first Python program"...]

5
\xef\xbb\xbf 看起来像是以 UTF-8 编码的 BOM - Mark Byers
当我在vi中打开.srt文件时,我可以看到每行后面有^M字符。 - damon
1个回答

11

你可以去除每一行的空格。如果你正在处理大文件,将其作为生成器运行也可以节省一些内存。

此外,看起来你正在处理带有BOM的UTF-8文件(这有点愚蠢或者至少是不必要的),因此你需要以不同的方式打开它。

import codecs

def strip_it_good(file):
    with codecs.open(file, "r", "utf-8-sig") as f:
        for line in f:
            yield line.strip()

1
strip() 似乎不能正确地去除 '\xef\xbb\xbf1\r\n' 序列,当我尝试这样做时只剩下 '1'。它只是去掉了尾随的 \n - Levon
我知道这将消除\r\n。在技术上,\xef\xbb是BOM,因此它不是空格。如果我检测到BOM,我通常会在预解析器中手动转储文件的前两个字符。 - Jordan
啊,好的,但根据输出结果,应该只是'1',对吧?(我的第一反应也是使用strip(),但我被一条评论说服了不要用它 :)) - Levon
让我看看是否能找到正确的Pythonic方法来忽略BOM。 - Jordan
1
哦,我并不是试图侮辱您关于BOM的问题。我想您只是文件的使用者。对于UTF-8文件来说,这是毫无意义的。 - Jordan
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接