Python不使用.readline/.readlines读取文件及代码运行问题咨询
Python文件读取及代码问题排查
1. 第二段代码未调用readline、readlines方法可正常读取文件的原理
Python中通过open()方法返回的文件对象是可迭代对象,直接对文件对象执行for line in file遍历操作时,解释器会默认逐行读取文件内容,每次迭代返回当前行的字符串,无需手动调用readline()/readlines()等读取方法。
同时第二段代码使用了with上下文管理器管理文件句柄,代码块执行结束后会自动关闭文件,无需手动调用file.close()方法,也避免了异常场景下资源泄漏的问题。
2. 第一段代码无法正常运行的问题排查
第一段代码存在两处核心错误:
- 变量调用错误:你通过
for lines in file.readlines()已经逐行拿到了每行内容存在lines变量中,但后续调用了file.split()——file是文件对象本身,没有字符串的split()方法,应该改为对每一行的内容做分割:line = lines.split() - 存在资源泄漏风险:你注释掉了
file.close()方法,文件操作完成后没有主动释放句柄,会长期占用系统资源。
修正后的第一段代码示例:
# 修正后可正常运行的第一段代码 file = open('/Users/max/Desktop/education/Test_record.csv', 'r') num_words = 0 for lines in file.readlines(): line = lines.split() num_words += len(line) print(num_words) file.close()
额外优化建议:不建议使用
readlines()读取文件,该方法会一次性把所有文件内容加载到内存中,处理大文件时会严重占用内存资源,直接迭代文件对象(和第二段代码一样)的内存占用更低,效率更高。
内容的提问来源于stack exchange,提问作者Maksim Maksimov
相关产品推荐
相关产品推荐

