'str'对象不能解释为整数python 3

时间:2019-08-25 22:32:19

标签: python python-3.x arraylist

尝试创建一个程序来更改存储在外部CSV文件中的用户名,方法是导入该文件,然后将其写入列表并追加列表。

我最初尝试使用无效的删除功能,然后尝试pop()

import csv
Usernames = []
x = int(input('How many user name u want to enter?: '))
for i in range(x):
    file = open('usernames.csv','a+')
    username = input('Enter the username: ')
    file.write(username)
    file.write('\n')
    file.close()

f = open ('usernames.csv','r')
with open ('usernames.csv','r') as fi1e:
    reader = csv.reader(fi1e)
    for row in reader:
        Username = row
        Usernames.append(Username)
print (Usernames)
f.close()

change_from = input ('What username would you like to change?: ')
Usernames.pop(change_from)

我希望它从列表中删除用户名。但是相反,它说“ str”对象不能解释为整数。

4 个答案:

答案 0 :(得分:0)

这是因为def recvMessages(s): while True: message = s.recv(2048) print(message) message = message.decode() messages.append(message) os.system("cls") for message in messages: print(message) def sendMessage(s): while True: message = input() message = message.encode() s.send(message) s = socket.socket() host = socket.gethostname() port = 8080 s.connect((host, port)) messages = [] print("Connected") connected = True threading.Thread(target=sendMessage, args=(s,)).start() threading.Thread(target=recvMessages, args=(s,)).start() 返回一个字符串。您可以像这样使用input将其转换为整数:int,然后将得到所需的类型。

答案 1 :(得分:0)

您需要将change_from变量转换为int:

change_from = int(input('What username would you like to change?: '))
Usernames.pop(change_from)

答案 2 :(得分:0)

您没有正确使用pop函数。请参阅https://docs.python.org/3/tutorial/datastructures.html

上的文档
  

list.pop([i])
  删除列表中给定位置的项目,然后   把它返还。如果未指定索引,则a.pop()删除并返回   列表中的最后一项。 (方法中i周围的方括号   签名表示该参数是可选的,而不是您应该   在该位置键入方括号。您将看到此表示法   经常在Python库参考中找到。)

您需要找到要删除的字符串的索引,并将其传递给pop,如下所示:

>>> a=['first', 'second', 'third']
>>> p = a.index('second')
>>> p
1
>>> a.pop(p)
'second'
>>> a
['first', 'third']

答案 3 :(得分:0)

pop()将项目的索引作为参数。在这种情况下,您应该检查用户输入的内容是否在列表中。如果是这样,它是什么索引?然后使用该整数。

change_from = input ('What username would you like to change?: ')
if change_from in Usernames:
    Usernames.pop(Usernames.index(change_from))

更新: 由于您不在乎返回的内容,因此请使用remove()。还要使用strip()来确保删除换行符。

这是全部。该行是一个数组,因此您需要选择第一项。

import csv
Usernames = []
x = int(input('How many user name u want to enter?: '))
for i in range(x):
    file = open('usernames.csv','a+')
    username = input('Enter the username: ')
    file.write(username)
    file.write('\n')
    file.close()

f = open ('usernames.csv','r')
with open ('usernames.csv','r') as fi1e:
    reader = csv.reader(fi1e)
    for row in reader:
        Username = row[0]
        Usernames.append(Username.strip())
print (Usernames)
f.close()

change_from = input ('What username would you like to change?: ')
if change_from.strip() in Usernames:
    Usernames.remove(change_from)