我今天正在审查一些笔记,但我发现了这段代码:
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知道它将整个文件读入内存,但如果你想从数据中创建一个列表,哪种方法更好?
我喜欢第二种方法,虽然它是一些更多的代码,但我清楚我正在做什么,而第一种方法,直到你进一步检查它还不是很清楚。
快速浏览一下,看起来我正在用我正在阅读的每一行覆盖一个变量...
这是为什么?你认为with
是while
吗?我习惯了第一个和我一眼就看起来就像它是什么:调用readlines()
读取整个文件。
在我快速浏览的地方,我创建了一份员工名单,我正在阅读每一行并附加到
List
。
当我看到明确的for
和while
循环一次只能处理一个元素或一行时,我的第一个想法是,“看起来像一个不习惯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]