Как вставить пару ключ-значение в список и записать в CSV-файл - PullRequest
0 голосов
/ 05 ноября 2019

Я новичок в Python, и мне дали задание для HRIS компании. Поэтому я написал код из необработанного CSV-файла, который будет переписан путем фильтрации всех других данных и обеспечения того, чтобы в списке были указаны первые экземпляры IN и OUT человека. Как я могу вставить или добавить время человека в списке в той же строке?

employeeInfo2 = {'Name': employeeName, 'Date': employeeDate, 'Status': employeeStatus}
        if employeeInfo2 not in employeeProfile:
            employeeProfile.append(employeeInfo2)

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

employeeProfile.append({'Time': employeeTime})
import csv
import string
import datetime
from dateutil.parser import parse
from collections import OrderedDict

employeeProfile = []
with open('newDTR.csv', 'r') as csv_file:
    employee = csv.DictReader(csv_file, delimiter=",")

    for employeeList in employee:
        stringDate = employeeList['Date/Time']
        employeeName = employeeList['Name']
        employeeStatus = employeeList['Status']
        dateTimeObject = datetime.datetime.strptime(stringDate,  '%d/%m/%Y %I:%M:%S %p')
        employeeDate = dateTimeObject.strftime("%d/%m/%Y")
        employeeTime = dateTimeObject.strftime("%H:%M:%S")
        parsedTimeOut = parse(employeeTime)
        expected = parsedTimeOut + datetime.timedelta(hours=9)
        timeOut = expected.time()
        employeeInfo2 = {'Name': employeeName, 'Date': employeeDate, 'Status': employeeStatus}
        if employeeInfo2 not in employeeProfile:
            employeeProfile.append(employeeInfo2)


with open('fixedDTR.csv', mode='w', newline='', encoding='utf8') as new_csv_file:
    fieldnames = ['Name', 'Date', 'Status', 'Time', 'Expected Time Out']
    csv_writer = csv.DictWriter(new_csv_file, fieldnames=fieldnames)
    csv_writer.writeheader()
    for b in employeeProfile:
        print(b)
        csv_writer.writerow(b)

Я ожидал, что employeeTime будет выровнен по каждой строке данных, но это не так. Возможно, потому что employeeProfile.append ({'Time': employeeTime}) находится на новой строке. Какой должен быть лучший подход?

output file

1 Ответ

0 голосов
/ 05 ноября 2019

Ну, глядя на ваш код, нет и вставьте для Time, как вы пишете b из employeeProfile.

Проще говоря, когда вы используете csv_write.writerow (b), это автоматически опустится на 1 строку вCSV-файл. Вы можете добавить свой ключ времени к диктовке, хранящейся в employeeprofile.

employeeInfo2 = {'Name': employeeName, 'Date': employeeDate, 'Status': employeeStatus}

if employeeInfo2 not in employeeProfile:
            employeeInfo2["Time"] = employeeTime # or whatever you wanted in the field 
            employeeProfile.append(employeeInfo2)

Это добавит к вашему столбцу столбец Time, который затем будет красиво записан csv_writer.writerow.

Basedна вашем выводе я предполагаю, что вы пишете время после этого, как это:

csv_writer.writerow(b) 
csv_writer.writerow(times)

где раз ваш диктат для Времен. что вызывает смещение, так как writerow добавляет новую строку в каждую строку вашего CSV.

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