如何提取文本文件第一列存入列表?Python优化方案问询
提取文本文件第一列内容的优化实现方法
问题场景
我的输入文件内容如下:
5MAX 5StarMax.us ABCNL ABCNewsLive.us AMC AMC.us
我原本用以下代码将整个文件读取到列表中:
MyLines=open("MyFile.txt",'r').read().splitlines()
得到的列表为:
['5MAX 5StarMax.us', 'ABCNL ABCNewsLive.us', 'AMC AMC.us']
但我实际需要的是仅提取每一行第一列内容组成的列表,即:
['5MAX', 'ABCNL', 'AMC']
我目前用这段代码实现了需求,但想找到更优的方案:
MyLines=[] for x in open("MyFile.txt",'r'): MyLines.append(x.split(' ')[0])
(原谅可能存在的拼写或符号错误,是手动输入的)
请问是否有更好的实现方法?
几种更优的实现方案
1. 列表推导式+上下文管理器
用列表推导式简化循环逻辑,同时用with语句自动管理文件资源(避免忘记关闭文件):
with open("MyFile.txt", 'r') as f: my_lines = [line.split()[0] for line in f]
这里split()不带参数时,会自动分割任意空白字符(包括多个空格、制表符等),比split(' ')更鲁棒,能处理行内存在多个空格的情况。
2. 函数式风格:map+匿名函数
如果偏好函数式写法,可以用map批量处理每行数据:
with open("MyFile.txt", 'r') as f: my_lines = list(map(lambda line: line.split()[0], f))
map会把文件对象的每一行传入匿名函数处理,最后转成列表即可。
3. 兼容空行的鲁棒写法
如果文件可能存在空行或全空白行,可以添加过滤条件避免索引错误:
with open("MyFile.txt", 'r') as f: my_lines = [line.split()[0] for line in f if line.strip()]
if line.strip()会跳过空行或仅含空白字符的行,确保split()[0]不会因无元素报错。
内容的提问来源于stack exchange,提问作者Dan Marcoux
相关产品推荐
相关产品推荐

