Ich habe den folgenden Code, in dem die Kommentare die Ausgabe und die gewünschte Ausgabe erklären. Es scheint mir nicht möglich zu sein, auf die verschiedenen Felder in der Liste zuzugreifen (oder die Logik zu verstehen).Zugriff auf die erste Spalte in jeder Zeile in einer Liste Python
Bei der fraglichen Datei handelt es sich um eine Textdatei, die auf dem Benutzernamen des Benutzers basiert. Die Inhalte sind:
"['Sci-Fi', 'Blade Runner']"
"['Sci-Fi', 'Star Trek']"
"['Sci-Fi', 'Solaris']"
"['Sci-Fi', 'Cosmos']"
"['Drama', ' The English Patient']"
"['Sci-Fi', 'Out of the Silent Planet']"
"['Drama', ' The Pursuit of Happiness']"
"['Drama', ' The English Patient']"
"['Drama', ' Benhur']"
"['Drama', ' Benhur']"
Eine Antwort auf die Frage, wie die Spalte Feld zuzugreifen (z Sci-Fi, Drama usw.) und eine Erklärung wäre sehr geschätzt.
Ich möchte die gesamte erste Spalte drucken .... dh SCI-FI, SCI-FI, SCI-FI, DRAMA etc ..... Ich brauche diese in eine Liste gelesen werden, so dass sie sein können manipuliert innerhalb der Liste
Basierend auf einer der Antworten unten, wenn das Problem ist in Bezug auf die Art, wie die Daten in die Datei an erster Stelle geschrieben wurde, ist der Code/Funktion, die diese Daten in die Datei schreibt, unten :
def viewfilmfunction(x,username):
#open the file as student file (variable)
print(username, ":You are about to view Film:", x, "Enter the selection ID number of the film again to confirm viewing")
with open("films.txt","r") as filmsfile:
#prompt the user to enter the ID number they require
idnumber=input("Enter the ID number you require:")
#call upon our reader (this allows us to work with our file)
filmsfileReader=csv.reader(filmsfile)
#for each row that is read by the Reader
for row in filmsfileReader:
#and for each field in that row (this does it automatically for us)
for field in row:
#if the field is equal to the id number that is being searched for
if field ==idnumber:
#print the row fields (genre and title) corresponding to that ID number
#create a list which contains the relevant fields in the row.
viewedlist=[row[1],row[2]]
print("You have viewed:", viewedlist)
with open("fakeflixfile.txt","r")as membersfile:
#Open Reader
membersfileReader=csv.reader(membersfile)
for row in membersfileReader:
for field in row:
if field==username:
#Open Writer to append to file -this time it looks for the file stored by that username
with open("%s.txt" % username,"a") as membersfile:
membersfileWriter=csv.writer(membersfile)
#Use the writer to append the viewedlist to the appropriate member's user file.
membersfileWriter.writerow([viewedlist])
FAKEFLIXFILE.txt Inhalt
username13022,[email protected],user,name1,2/02/3022,user Road,US455P,Mle,Nothing,[email protected] AugustineSalins1900.txt,[email protected],Augustine,Salins,5/02/1900,Hutchins Road,CRBBAAA,Male,Theology,[email protected] JosieBletchway3333,[email protected],Josie,Bletchway,29/02/3333,Bletch Park,BB44AA,Female,Encryption,[email protected] JoeBloggs.0.0,[email protected],Joe,Bloggs,0.0.0.0,0 Road,00000,Male,Joe Blogs,[email protected]
UPDATE: Ich habe jetzt die txt-Datei (basierend auf Benutzername) geändert, so dass der Ausgang erzeugt keine Liste erzeugen:
Drama, The English Patient
Drama, Benhur
Sci-Fi,Cosmos
jedoch auf Lauf:
def viewrecs(username):
#pass
username = (username + ".txt")
with open(username,"r") as f:
fReader=csv.reader(f)
for row in fReader:
print(eval(row)[0])
Der Fehler weiterhin besteht:
print(eval(row)[0])
TypeError: eval() arg 1 must be a string, bytes or code object
Wie funktioniert Ihr ‚fakeflxfile.txt‘ aussehen wie? Kannst du ein paar Zeilen einfügen? – Vlad
eingefügt FAKEFLIXFILE.txt Inhalt in der Bearbeitung über –
, weil Sie auf eine CSV-Datei zugreifen und auf bestimmte Spalten zugreifen möchten, könnten Sie versuchen, ein 'Dataframe' mit' Pandas' zu verwenden, wenn Pandas implementieren eine Option ist. Das wäre ziemlich einfach, wenn Sie all Ihre Inhalte einrahmen und auf Zeilen und Spalten zugreifen möchten. – arde