繁体   English   中英

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

[英]Is using readlines() the better approach than creating a List?

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

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

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

将它与此代码进行比较:

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列表,我正在阅读每一行并附加到列表中。

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

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

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

这是为什么? 你看见with作为while 我习惯了第一个和我一眼就看起来就像它是什么:调用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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM