2017-07-20 2 views
-1

Hier ist ein Beispiel meiner Daten (und es gibt viele Zeilen dieser Daten in meiner CSV-Datei) und ich brauche ein Programm, das kann die Bindestriche, Doppelpunkte und den Buchstaben "T" trennen, so dass ich die Zeilen mit meinem gewünschten Tag ausdrucken kann (zB den 31. Dezember). Ich habe bereits einen Code, der das Jahr und den Monat herausfiltern kann, aber ich habe derzeit Probleme, das T zu splitten und das T als Trennzeichen zu setzen.Python: Wie man mehrere Trennzeichen verwendet, um Kommas, Doppelpunkte und Buchstaben in einer Reihe zu trennen

AC2_AC1,382,3,2015-12-31T22: 40: 00-05

import csv 

desiredMonth = 12 
with open('extractedStreet2015.csv', 'r') as csvfile: 
    content = csv.reader(csvfile, delimiter=',') 
    for row in content: 
     month = int(row[3].split('-')[1]) 
     if month == desiredMonth: 
      print(row) 

Wie kann ich einen Code schreiben, so dass ich auch die Doppelpunkte aufspalten und die Buchstaben "T"? (PS ich Python neu bin so eine Erklärung wäre sehr dankbar)

EDITED Wenn ich das Programm unter laufenden Versuch:

import csv 
import isodate 

desiredHour = 12 

with open('bt_2015.csv', 'r') as csvfile: 
    content = csv.reader(csvfile, delimiter=',') 
    for row in content: 
     date = isodate.parse_datetime(content[3]) 
     if date.hour == desiredHour: 
      print(row[1]) 

Diese Meldung erscheint:

Traceback (most recent call last): 
    File "C:\Python36\hour.py", line 10, in <module> 
    date = isodate.parse_datetime(content[3]) 
TypeError: '_csv.reader' object is not subscriptable 

Was kann ich tun, um dieses Problem zu beheben?

+1

tun Sie reali ze your date/time ist ein standard iso 8601 formatierter String – cmd

+0

Verwenden Sie das 'datetime'-Modul, um Ihre Datumszeichenfolge zu analysieren. –

+0

Entschuldigung, ich wusste nicht, wie ich schon sagte, ich bin neu in der Programmierung (gerade erst vor einer Woche gestartet) – Melissa

Antwort

1

Wie sei es

import isodate 
data = 'AC2_AC1,382,3,2015-12-31T22:40:00-05' 
parts = data.split(',') 
isodate.parse_datetime(parts[3]) 
datetime.datetime(2015, 12, 31, 22, 40, tzinfo=<FixedOffset '-05'>) 

jetzt haben Sie ein Standard-Python-Datetime-Objekt

+0

können Sie, aber 'isodate' behandelt alle iso 8601 Formatvarianten. – cmd

+0

Wie bekomme ich Isodat? – Melissa

+0

vorausgesetzt, Sie haben pip: 'pip install isodate' – cmd

0

Ihr Beispiel verwenden:

# filename: test_data.txt 
AC2_AC1,382,3,2015-12-31T22:40:00-05 

Dies ist, was ich tun würde ....

$ pip install python-dateutil 

Siehe: pip

See: namedtuple

See: python-dateutil

#!/usr/bin/env python 
# filename: test.py 
import csv 
from collections import namedtuple 

from dateutil import parser 

# I don't know your field names, but maybe you can supply them. 
StreetRecord = namedtuple('StreetRecord', 'ac_field, num01, num02, timestamp') 


def extract_records(filepath, month): 
    """Captures records that match the month 

    Args: 
     filepath (str): path to file 
     month (int): value of month to filter on 

    Yields: 
     StreetRecord: each street record that matches the month 
    """ 
    with open(filepath, 'r') as stream: 
     content = csv.reader(stream, delimiter=',') 
     for record_data in content: 
      record = StreetRecord(*record_data) 
      # example timestamp: 2015-12-31T22:40:00-05 
      timestamp = parser.parse(record.timestamp) 
      if timestamp.month == month: 
       yield record 


if __name__ == '__main__': 
    for record in extract_records('test_data.txt', 12): 
     print(record) 

es dann laufen ...

python test.py 

Und Sie werden sehen:

StreetRecord(ac_field='AC2_AC1', num01='382', num02='3', timestamp='2015-12-31T22:40:00-05') 
Verwandte Themen