使用readlines()比创建List更好吗?

问题描述 投票:1回答:1

我今天正在审查一些笔记,但我发现了这段代码:

def read_entire_file(file):
    with open(file) as f_obj:
        contents = f_obj.readlines()
    print(contents)
    print(type(contents)) # I added this line

快速浏览一下,看起来我正在用我正在阅读的每一行覆盖一个变量,但是,它创建了一个列表,你可以用contents方法验证type()是一个列表。

将它与此代码进行比较:

def read_file_into_list(file):

    employees = []

    with open(file) as f_obj:
       for line in f_obj:
           employees.append(line.strip())
    print(employees)

在我快速浏览的地方,我创建了一个employee列表,我正在阅读每一行并附加到列表中。

我从this link知道它将整个文件读入内存,但如果你想从数据中创建一个列表,哪种方法更好?

我喜欢第二种方法,虽然它是一些更多的代码,但我清楚我正在做什么,而第一种方法,直到你进一步检查它还不是很清楚。

python list file io
1个回答
3
投票

快速浏览一下,看起来我正在用我正在阅读的每一行覆盖一个变量...

这是为什么?你认为withwhile吗?我习惯了第一个和我一眼就看起来就像它是什么:调用readlines()读取整个文件。

在我快速浏览的地方,我创建了一份员工名单,我正在阅读每一行并附加到List

当我看到明确的forwhile循环一次只能处理一个元素或一行时,我的第一个想法是,“看起来像一个不习惯Python的C ++或Java程序员。”这是你应该摆脱的习惯。在Python中,通常使用批量操作,列表推导或生成器来避免旧的学校命令循环。

我喜欢第二种方法,虽然它是一些更多的代码,但我清楚我正在做什么,而第一种方法,直到你进一步检查它还不是很清楚。

作为一名资深的Python程序员,我更喜欢第一个。如果要将文件读入内存,请调用readlines()。它完成它在锡上的说法。

也就是说,我也会质疑是否将整个文件读入内存是正确的。也许你应该逐行处理它,而不是嚼掉一大堆内存。在那种情况下,惯用的解决方案确实是一个for循环。但不是只需将所有元素添加到列表中的那个。

with open(file) as f_obj:
    for line in f_obj:
        process_line(line.strip())

或者,如果剥离空白很重要并且您想要将所有内容读入内存,请考虑列表推导。

with open(file) as f_obj:
    employees = [line.strip() for line in f_obj]
© www.soinside.com 2019 - 2024. All rights reserved.