gpt4 book ai didi

python - 访问列表中行之间的字段,而不是字符

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:20 25 4
gpt4 key购买 nike

我从文件中读取了以下列表:films.txt

    ['0,Genre, Title, Rating, Likes', '1,Sci-Fi,Out of the Silent Planet, PG, 0', '2,Sci-Fi,Solaris, PG,0', '3,Sci-Fi,Star Trek, PG, 0', '4,Sci-Fi,Cosmos, PG, 0', '5,Drama, The English Patient, 15, 0', '6,Drama, Benhur, PG, 0', '7,Drama, The Pursuit of Happiness, 12, 0', '8,Drama, The Thin Red Line, 18, 0', '9,Romance, When Harry met Sally, 12, 0', "10,Romance, You've got mail, 12, 0", '11,Romance, Last Tango in Paris, 18, 0', '12,Romance, Casablanca, 12, 0']

我需要根据电影的索引号访问特定字段(即“喜欢”)。例如

的输出
  print("PRINT THE CURRENT FILM ROW", allfilms[3])
print("PRINT THE CURRENT LIKES", allfilms[4])

是:

 PRINT THE CURRENT FILM ROW 3,Sci-Fi,Star Trek, PG, 0
PRINT THE CURRENT LIKES 4,Sci-Fi,Cosmos, PG, 0

但是我想要访问的是第三行的0。这是第三行(或第二行)中的第四个字段,具体取决于索引号,因此我需要在这里使用 ifloop

我尝试过:

print("PRINT THE CURRENT FILM ROW", allfilms[3][4])

它输出一个字符而不是一个字段......

i

它正在读取科幻小说中的“i”字符,这是沿...的第四个字符。

如前所述,我需要第四个字段(0)。有什么想法吗?

根据以下建议,我尝试了:

def likeafilm(x,username):
#prompt the user to enter the ID number they require
idnumber=int(input("To confirm, please enter the number of the film you wish to like:"))
#create a list which stores and displays all the data in the films txt file
with open("films.txt",mode="r") as f:
allfilms=[]
#allfilms=list(csv.reader(allfilms)) - this does not clean the extra spaces so try the next line
allfilms=[[x.strip() for x in row] for row in csv.reader(allfilms)]
print(allfilms[3])
allfilms[3][4]=str(int(allfilms[3][4])+1)
print(allfilms)

但它会产生以下错误:

    print(allfilms[3])

索引错误:列表索引超出范围

此外,我需要使用 idnumber 而不是 3。(如上面的函数所示)

print(allfilms[idnumber])

同样的错误:

  print(allfilms[idnumber])
IndexError: list index out of range

最佳答案

基本上,数组的每个元素都是一个字符串。从逗号分隔列表的角度来看,您隐式地确定第四个字段是第四个元素。

您所需要的只是实现这种分割:

print("PRINT THE CURRENT FILM ROW", allfilms[3].split(",")[4])

或者(不太为人所知),您可以将列表按原样传递给 csv.reader 对象,该对象会为您拆分字符串,并且您可以迭代拆分的行。我为演示选择了一些字段:

cr = csv.reader(allfilms)
for row in cr:
print(row[1],row[2],row[4])

数据结果:

Genre  Title  Likes
Sci-Fi Out of the Silent Planet 0
Sci-Fi Solaris 0
Sci-Fi Star Trek 0
Sci-Fi Cosmos 0
Drama The English Patient 0
Drama Benhur 0
Drama The Pursuit of Happiness 0
Drama The Thin Red Line 0
Romance When Harry met Sally 0
Romance You've got mail 0
Romance Last Tango in Paris 0
Romance Casablanca 0

请注意,这不是使数据库持久化的最佳方法,有时逗号之前/之后会有不需要的空格,我建议将项目一劳永逸地存储为列表的列表。

为了说明这一点,您的后续问题(将 0 更改为 1)将得到如下回答:

allfilms[3] = ",".join(["1" if i==4 else x for i,x in enumerate(allfilms[3].split(","))])

(重新创建字符串,但在 4 索引上将 0 更改为 1,如您所见,这并不容易)

另一方面,如果你这样做:

allfilms = list(csv.reader(allfilms))

或者清理多余的空间:

allfilms = [[x.strip() for x in row] for row in csv.reader(allfilms)]

你会得到列表的列表。现在:

>>> print(allfilms[3])
['3', 'Sci-Fi', 'Star Trek', 'PG', ' 0']

要更改索引 4,只需执行以下操作:

allfilms[3][4] = '1'

或者“增量”,转换为 int,添加,转换回字符串:

allfilms[3][4] = str(int(allfilms[3][4])+1)

关于python - 访问列表中行之间的字段,而不是字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com