Использование Python для чтения файлов .CSV, а затем сравнения столбцов / строк - PullRequest
0 голосов
/ 29 мая 2019

В настоящее время я пытаюсь разработать программу, которая считывает данные из текстового файла и возвращает пару сотрудников, которые больше всего работали вместе. Я решил сделать это в формате .CSV, так как это все еще простой текстовый формат, но разделенный запятыми.

Пример:

EmpID,ProjectID,DateFrom,DateTo
1,A,2014-11-01,2015-05-01
2,B,2013-12-06,2014-10-06
2,C,2014-01-07,2016-03-07
3,B,2015-06-04,2017-09-04
5,C,2014-10-01,2015-12-01
1,A,2013-03-07,2015-11-07
2,C,2015-07-09,2019-01-19
3,B,2013-11-13,2014-03-13
4,C,2016-02-14,NULL
5,D,2014-03-15,2015-11-09

Теперь я узнал, как читать файлы .CSV, но я не уверен в том, что лучше для этого после (сравнение значений и т. Д.). На данный момент я решил, что это самый чистый вариант:

import csv

with open('data.csv', 'r') as f:
  reader = csv.reader(f)
  your_list = list(reader)

print(your_list)

Мне просто нужен совет, если лучшим способом будет сравнение индексов в списке. Я тоже думал о словарях, но я не уверен, поэтому и спрашиваю здесь причину :) И SQL не вариант, хотя с этим было бы так просто. Извините, если это плохой вопрос, но я сейчас изучаю Python, и это довольно важная задача для меня. Спасибо!

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Вы можете использовать пакет datetime, чтобы проверить, сколько времени прошло.Создайте список людей в CSV-файле, затем отсортируйте список по истекшему времени.для первых 8 строк файла csv (потому что NULL не определен!):

1,A,2014-11-01,2015-05-01
2,B,2013-12-06,2014-10-06
2,C,2014-01-07,2016-03-07
3,B,2015-06-04,2017-09-04
5,C,2014-10-01,2015-12-01
1,A,2013-03-07,2015-11-07

Вы можете использовать это:

from datetime import datetime
with open('file.txt', 'r') as file:
    my_list = list()
    for line in file:      
        list_ = line.split(',')
        dt1 = datetime.strptime(list_[2], '%Y-%M-%d')
        dt2 = datetime.strptime(list_[3][:10], '%Y-%M-%d')
        my_list.append(list_[:2] + [dt2-dt1])
        my_list.sort(key=lambda x: x[2])
print(my_list)

output:

[['3', 'B', datetime.timedelta(days=364, seconds=85920)], ['1', 'A', datetime.timedelta(days=364, seconds=86040)], ['2', 'B', datetime.timedelta(days=364, seconds=86280)], ['5', 'C', datetime.timedelta(days=365, seconds=120)], ['2', 'C', datetime.timedelta(days=730, seconds=120)], ['1', 'A', datetime.timedelta(days=730, seconds=480)], ['3', 'B', datetime.timedelta(days=731, seconds=180)], ['2', 'C', datetime.timedelta(days=1470, seconds=86040)]]
1 голос
/ 29 мая 2019

Как я понимаю из того, что вы написали, я думаю, что вам нужно что-то вроде этого:

#read csv, and split on "," the line
csv_file = csv.reader(open('data.csv', "rb"), delimiter=",")

for item in csv_file:
#do your work

может быть, вы тоже можете посмотреть на панд, если у вас большие данные.В этом случае работать с Пандами будет эффективнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...