我正在尝试将18个列表项添加到3个文本文件中,每个文件6个项目。 paths[0]
和paths[1]
文本文件正确,但第三个paths[2]
只能获得3个项目。
mainStudents = ["1 Name Surname D1", "2 Name Surname D2" ...16x]
def randomize(path):
count = 0
currentpathIs = getprojdir + "\\" + "\shuffled" + path
print(currentpathIs)
with open(currentpathIs, "a+") as file:
while True:
try:
file.write(mainStudents[count] + "\n")
del(mainStudents[count])
print(count)
count += 1
except Exception as e:
print(mainStudents)
break
if count == 6:
break
randomize(paths[0])
randomize(paths[1])
randomize(paths[2])
我收到了这个错误:
追踪(最近一次呼叫最后一次):
文件“C:\ Users \ user \ Desktop \ New folder \ python.py”,第53行,随机化(路径[2])
文件“C:\ Users \ user \ Desktop \ New folder \ python.py”,第43行,随机化 file.write(mainStudents [count] +“\ n”)
IndexError:列表索引超出范围
但是mainStudents
列表中还有3个项目?
答案 0 :(得分:1)
您遇到的问题是,当您从列表中删除该项目时,您将减小其大小。因此,您的计数将增加,然后尝试访问不再存在的索引。举一个非常简单的例子来看一个大小为二的列表:
mainStudents[0]
现在,当您调用方法时,将会发生什么,第一次迭代将起作用,因为您将访问['2 Name Surname D2']
。
但是,在第二次迭代中,您已从列表中删除该项目,因此现在您的列表如下所示:
0
现在是一个大小为1的列表,其索引访问权限为count
。
因此,while循环的下一次迭代将在1
处IndexError
。因此,这正是您while
的来源。
决定使用列表中的del
循环和mainStudents
项的组合是导致问题的原因。相反,选择你想要迭代的东西,你的逻辑似乎是def randomize(path):
currentpathIs = getprojdir + "\\" + "\shuffled" + path
print(currentpathIs)
with open(currentpathIs, "a+") as file:
for student in mainStudents:
file.write(student + "\n")
。那么为什么不这样做呢?
\n
您可以通过使用可用的字符串方法join
简单地获取列表并将其转换为由'\n'.join(mainStudents)
分隔的字符串来进一步简化:
os.path.join
此外,还有一些方法可以促进路径创建。看一下os模块。更具体地说是from os.path import join
def randomize(path):
currentpathIs = join(getprojdir, shuffled, path)
with open(currentpathIs, "a+") as file:
file.write('\n'.join(mainStudents))
。因此,您的代码可以进一步简化为:
public class Class2 : IInfoCard
{
public string Name { get; set;}
}