2016-04-11 15 views
0

Ich versuche, die Spalte „Transcript Text“ aus einer CSV-Datei zu lesen, die wie folgt aussieht -Python-cant aus allen Zeilen aus einer csv lesen

Order,LearningID,Gender,Race,College, ID ,B,Transcript Text 
1,T66666666B,Male,UNKNOWN,AMC,122333444,,(BEGIN INTERVIEW) 
6,T77777777B,Male,UNKNOWN,AMC,133333333,,INTERVIEWER: CTVA's your major? 
7,T88888888B,Male,UNKNOWN,AMC,144444444,,"STUDENT: Yes, that's right." 

Und mein Code Spalte nicht zu lesen. 7 (Transcript Text) sieht wie folgt aus -

import csv  

file_csv = open("test.csv", newline='') 
csv_reader = csv.reader(file_csv, delimiter=',', quotechar='|') 
txt_string ='' 

common_words = ['mmhmm', 'interposing', 'xblank'] 

for i, v in enumerate(csv_reader): 
    print (i) 
    print(v[7]) 
    txt_string += v[7] 

file_csv.close() 

Nun, wenn ich Schleife durch das, es einige Werte überspringt, nicht alle Werte für v [7] (Spalte - Transkript Text) gedruckt. Seltsamerweise werden die Zählerwerte nicht gedruckt.

Die Ausgabe sieht wie folgt aus -

0 
Transcript Text 
3 
STUDENT: Yes, that's right. 

ich vergewissert haben, dass die csv gespeichert wird mit utf-8-Option MS Excel, ich habe versucht, die Kodierung UTF-8 als auch einstellen.

file_csv = open("test.csv", newline='', encoding ='utf-8') 

Aber nichts funktioniert. Und auch sehr seltsam, jedes Mal, wenn ich dies führe, sind die Ergebnisse unberechenbar, das heißt, einige Zeilen, die vorher nicht gedruckt wurden, werden gedruckt.

Was könnte das Problem hier sein? .. (mit Python 3.5 und die aktuelle CSV-Datei Ich verwende hat rund 25k Zeilen

+0

Welches Betriebssystem verwenden Sie? –

+0

Können Sie erste 2-3 Zeilen Ihrer CSV-Datei zeigen. –

+0

Ich benutze Windows 7 – sandunes90

Antwort

0

Dies ist Python2, aber einen Versuch wert, um zu sehen, ob es das Problem behebt

Das erste Problem, das ich sehe, ist Sie geben ein Zitat Zeichen von |, aber es sieht aus wie Ihr Zitat Zeichen sollte " sein, da die 8. Spalte (Transcript Text) in ", nicht | gewickelt ist.

Auch Ich mag die erste Zeile lesen (wenn Spaltenüberschriften vorhanden sind) und verwenden zip ein Wörterbuch der Spaltendaten zu erstellen, anstatt durch den Index zugreifen (was falsch werden kann, wenn Spalten Reihenfolge ändern)

import csv 

file_csv = open("so.csv") 
csv_reader = csv.reader(file_csv, delimiter=',', quotechar='"') 
conversation = [] 

common_words = ['mmhmm', 'interposing', 'xblank'] 

headers = [header.replace(" ", "_").lower() for header in csv_reader.next()] 
for data in csv_reader: 
    columns = dict(zip(headers, data)) 
    conversation.append(columns["transcript_text"]) 

file_csv.close() 

for i, item in enumerate(conversation): 
    print(i, item) 
+0

Das hat funktioniert, aber ich möchte Indizes in meinem Code verwenden, wie ich bestimmte Zeilen nach einem Wert in einer Spalte herausfiltern möchte. Z.B. - Wenn v [3] = foo, füge v [7] zu string hinzu. \t Auch Korrigieren der quotechar hat das Problem in Python 3 nicht behoben. Die Ausgabe ist jetzt so - für die Eingabe "sie sind" ist die Ausgabe "they \ x92re". Das bedeutet, dass es implizit durch Ihren Code in utf konvertiert wird. – sandunes90

0

Ihr quotechar ist doppelte Anführungszeichen "
Auch python3 starten Sie diese Art von Datei-Handling verwenden sollten, versuchen Sie es:

text = '' 
with open('test.csv', newline='') as csvfile: 
csvFile = csv.reader(csvfile, delimiter=',', quotechar='"') 
for row,data in enumerate(csvFile): 
    print(row, data[7]) 
    text += data[7] 

print(text) 

Ausgang:

0 Transcript Text 
1 (BEGIN INTERVIEW) 
2 INTERVIEWER: CTVA's your major? 
3 STUDENT: Yes, that's right. 
Transcript Text(BEGIN INTERVIEW)INTERVIEWER: CTVA's your major?STUDENT: Yes, that's right. 
0

nur auf der Oberfläche, es sieht aus wie Sie die falsche QuoteChar verwenden Vom csv docs.

Weist Schriftsteller Objekte, um nur die Felder zitieren , die solche Sonderzeichen enthalten als Trennzeichen, QuoteChar oder jede der Charaktere in lineterminator.

Aus irgendeinem Grund übergeben Sie ein Pipecharakter wie der quotechar. Aber klar, die Daten, die Sie gab eine doppelte Anführungszeichen verwendet, dies ist die Standardeinstellung und scheint gut zu funktionieren:

>>> import csv, StringIO 
>>> data = """Order,LearningID,Gender,Race,College, ID ,B,Transcript Text 
... 1,T66666666B,Male,UNKNOWN,AMC,122333444,,(BEGIN INTERVIEW) 
... 6,T77777777B,Male,UNKNOWN,AMC,133333333,,INTERVIEWER: CTVA's your major? 
... 7,T88888888B,Male,UNKNOWN,AMC,144444444,,"STUDENT: Yes, that's right." 
... """ 
>>> fd = StringIO.StringIO(data) 
>>> print list(csv.reader(fd)) 
[['Order', 'LearningID', 'Gender', 'Race', 'College', ' ID ', 'B', 'Transcript Text'], ['1', 'T66666666B', 'Male', 'UNKNOWN', 'AMC', '122333444', '', '(BEGIN INTERVIEW)'], ['6', 'T77777777B', 'Male', 'UNKNOWN', 'AMC', '133333333', '', "INTERVIEWER: CTVA's your major?"], ['7', 'T88888888B', 'Male', 'UNKNOWN', 'AMC', '144444444', '', "STUDENT: Yes, that's right."]] 
0

ändern Sie Ihren Code auf die folgenden,

with open(file) as f: 
    reader = csv.reader(f) 
    next(reader) # skip the header row 
    for i, row in reader: 
     print(i) 
     print(row[7]) 

wenn, ob das funktioniert.

Verwandte Themen