所以我从计算机上的文件中获取列表
我正在查看文件中的名称是否等于某个名称
for i in names:
if names[i] == "paaches":
NotTaken.append(names(i))
else:
print(i)
但是我一直得到这个
File "/Users/rj-mac/Desktop/python/learn.py", line 10, in <module>
if names[i] == "paaches":
TypeError: list indices must be integers or slices, not str
我的整个代码
names = open("usernames.txt").readlines()
NotTaken = []
for i in names:
if i == "paaches":
NotTaken.append(names[i])
else:
pass
print(NotTaken)
usernames.txt
paaches
testuser
notueser
答案 0 :(得分:0)
如果您读到错误,则表示列表的索引(或索引)不能为字符串。这意味着您的for
循环正在返回i
的字符串,这是列表的无效索引。
for
在python中循环的工作方式是如果您有一个列表:
l = ["item1", "item2", "item3"]
执行以下操作将为列表item
中的每个项目打印l
:
for item in l:
print item
因此,无需检查names[i]
,只需检查i
是否等于"paaches"
,并在匹配时附加i
(不是names[i]
) :
for i in names:
if i == "paaches":
NotTaken.append(i)
else:
print(i)
EDIT
它对您不起作用的原因是,当您执行names = open("filename.txt").readlines()
时,names
列表中的每个项目的末尾都将带有\n
(即列表为{{1 }}。
要解决此问题,请在读取文件后使用names = ["paaches\n", "testuser\n", "notueser\n"]
(在字符串末尾添加换行符和空格):
rstrip()
然后,您可以使用names = open("usernames.txt").readlines()
new_names = []
for name in names:
name = name.rstrip()
new_names.append(name)
循环:
for
答案 1 :(得分:-2)
您必须使用strip()
来执行此操作,因为readlines()
将输出类似['paaches\n', 'testuser\n', 'notueser']
的列表:
names = open("usernames.txt").readlines()
NotTaken = []
for i in names:
if i.strip() == "paaches":
NotTaken.append(i.strip())
else:
pass
print(NotTaken)
输出:
['paaches']