2017-04-13 6 views
2

Ich muss einen Code schreiben, der eine CSV-Datei und extrahiert Daten im Zusammenhang mit Passagierdaten aus der Titanic. Ich muss aus dieser Datei nehmen und eine neue Datei schreiben, die die Passagiere in der dritten Klasse enthält, die überlebt haben (nur das) und den Header.CSV-Datei schreiben, müssen bestimmte Zeilen in neue CSV-Datei schreiben

Ich habe meinen Code (im Text) Ich habe bis jetzt geschrieben. Es funktioniert für den Testfall (es druckt die # 5), aber meine target_data_file ist leer, glaube ich?

Ich schaue, wie diese spezifischen Zeilen in meine target_data_file schreiben. Ich denke, es sollte etwas in Richtung einer for-Schleife mit sein, wenn survived == str(1) and pclass == str(3), schreiben Sie an Target_data_file.

Nicht sicher, obwohl!

Danke!

import csv 
from copy import deepcopy 

def third_survived(source_data_file, target_data_file): 
    """(str, str) -> int 
    Input: Source data is the name of a .csv file containing a subset of the 
    Titanic passenger data, and target_data, the name of a new csv file to be 
    created. 
    Output: This function will create a new .csv file named target_data_file and 
    write in it the lines from source_data_file that correspond to the third class 
    passengers who survived the sinking. The function returns the number of lines 
    written to target_data_file. 

    >>>third_survived('titanic_some.csv', 'titanic_target.csv') 
    5 
    """ 

    with open (str(source_data_file), 'r') as file: 
     data_reader=csv.reader(file) 
     data_orig=[] 
     for row in data_reader: 
      data_orig.append(row) 

    count= 0 
    for elements in range(1,len(data_orig)): 
     survived=data_orig[elements][1] 
     pclass=data_orig[elements][2] 
     if survived == str(1) and pclass == str(3): 
      count +=1 

    with open(str(target_data_file), 'w') as newfile: 
     data_writer=csv.writer(newfile) 


     if count == 0: 
      return data_orig[0] 
     else: 
      return count 

Antwort

0

Sie in die target_data_file zusammen mit der Zählschleife schreiben könnte (und Sie brauchen nicht die data_orig Liste). Das heißt:

def third_survived(source_data_file, target_data_file): 
    count= 0 
    with open (str(source_data_file), 'r') as file: 
     data_reader=csv.reader(file) 
     with open(str(target_data_file), 'w') as newfile: 
      data_writer=csv.writer(newfile) 
      for row in data_reader: 
       survived=row [1] 
       pclass=row [2] 
       if survived == "1" and pclass == "3": 
        count +=1 
        data_writer.writerow(row) 

    return count 

Wenn Sie noch daran interessiert, die erste Reihe zurück, wenn die count Null ist (Dokumentation im Widerspruch) - Sie

first_row = None 

direkt vor der Definition von count hinzufügen könnten, und in jeder Iteration Prüfung

if first_row is None: 
    first_row = row 

Und am Ende Rückkehr

if count == 0: 
    return first_row 
return count 
0

Dies ist viel einfacher in Pandas zu tun, und da Sie die (kaggle?) Datensätze verwenden, finden Sie bereits eine Menge Unterstützung dafür.

Verwandte Themen