Python 3.x Can';当通过不同的变量将csv.reader对象转换为列表时,不要迭代该对象
当我偶然发现这个问题时,我正在做一些基本的CSV文件操作,现在我知道如何避免它,但我只是想更好地了解发生了什么。 每当我想迭代Python 3.x Can';当通过不同的变量将csv.reader对象转换为列表时,不要迭代该对象,python-3.x,csv,Python 3.x,Csv,当我偶然发现这个问题时,我正在做一些基本的CSV文件操作,现在我知道如何避免它,但我只是想更好地了解发生了什么。 每当我想迭代csv.reader对象时,我都可以很容易地完成。但是,每当我试图通过另一个变量将对象转换为列表时,它就会阻止迭代csv.reader对象的迭代循环启动 def checkPlayer(discorname,playerName): 以open('PLAYERS.csv','r')作为fil: r=csv.读卡器(fil) l=列表(r) lineNum=1 对于r中的行
csv.reader
对象时,我都可以很容易地完成。但是,每当我试图通过另一个变量将对象转换为列表时,它就会阻止迭代csv.reader
对象的迭代循环启动
def checkPlayer(discorname,playerName):
以open('PLAYERS.csv','r')作为fil:
r=csv.读卡器(fil)
l=列表(r)
lineNum=1
对于r中的行:
打印(行)
l=list(r)
是阻止循环执行的因素
下面的代码工作正常,循环执行正常
def checkPlayer(discorname,playerName):
以open('PLAYERS.csv','r')作为fil:
r=csv.读卡器(fil)
lineNum=1
对于r中的行:
打印(行)
我期待出现这种情况的原因是,当将
csv.reader
转换为列表时,会发生对象的迭代,这意味着它在执行循环之前将csv.reader
对象设置在端点。csv.reader表示底层文件(仅在原始文件的顶部添加一些CSV结构)。因此,它可以从开始到结束读取一次,并且在到达文件末尾后不会返回任何内容
当您运行l=list(r)
时,您将读取由句柄r
表示的文件的全部内容,并到达基础文件的结尾。因此,在句柄上的任何进一步迭代(对于r:
中的行)将从文件的结尾开始,因此您将不会读取任何内容
要解决此问题,您可以在第二次读取文件之前将文件倒回开头:fil.seek(0)
:
with open ('PLAYERS.csv', 'r') as fil:
r = csv.reader(fil)
l = list(r)
lineNum = 1
fil.seek(0)
for line in r:
print(line)
这也许能回答你的问题question@RamPrabodhInduri-这并没有解决S.Riyadh的问题。谢谢!我现在对代码片段中发生的事情有了更好的理解