【发布时间】:2026-01-16 18:45:01
【问题描述】:
最近我在 Python 中遇到了一个带有 open() 语句的奇怪行为。 以下代码仅返回第一个读取语句的输出,具有一个空行列表。
input_csv = []
with open(self.path, 'r') as f: # Opening the CSV
r = csv.DictReader(f)
for row in r:
input_csv.append(row) # Storing its contents in a dictionary for later use
lines = f.readlines() # Reading it in as a list too
f.close()
将其拆分为两个 open () 语句时,会根据需要返回对象。
input_csv = []
with open(self.path, 'r') as f: # Opening the CSV
r = csv.DictReader(f)
for row in r:
input_csv.append(row) # Storing its contents in a dictionary for later use
f.close()
with open(self.path, 'r') as f: # Opening the CSV
lines = f.readlines() # Reading it in as a list too
f.close()
为什么f变量在第一条语句中只使用了一次?
非常感谢
【问题讨论】:
-
DictReader就像readlines()一样耗尽文件。一旦打开的文件到达末尾,就没有更多数据要读取,除非像您所做的那样,您再次open()它。 -
当您从文件中读取数据时,系统会移动“指针”,通知系统必须读取下一个数据在文件中的哪个位置。当您读取完整文件时,指针会显示文件结尾,您必须重新打开文件或使用
f.seek(0)将指针移动到文件开头。