filenameA ="ApptA.csv" 
filenameAc = "CheckoutA.csv"

def checkouttenantA():
    global filenameA
    global filenameAc
    import csv
    import datetime
    with open(filenameA, 'r') as inp, open(filenameAc, 'a' , newline = "") as out:
        my_writer = csv.writer(out)
        for row in csv.reader(inp):
            my_date= datetime.date.today()
            string_date = my_date.strftime("%d/%m/%Y")
            if row[5] <= string_date:
                my_writer.writerow(row)

Tanggal disimpan dalam format %d/%m/%Y dalam file excel pada kolom [5]. Saya mencoba membandingkan tanggal dalam file csv dengan tanggal sebenarnya, tetapi hanya membandingkan bagian %d. Saya berasumsi itu karena tanggal dalam format string.

1
Anish Ardjoon 19 Agustus 2017, 20:58

2 jawaban

Jawaban Terbaik

Oke jadi ada beberapa perbaikan yang harus dilakukan juga, yang akan saya edit sebagai ini, tetapi Anda mengonversi tanggal hari ini menjadi string dengan strftime() dan membandingkan dua string, Anda harus mengonversi string tanggal dari file csv ke objek datetime dan membandingkannya sebagai gantinya.

Saya akan menambahkan banyak komentar untuk mencoba dan menjelaskan kode dan alasan di baliknya.

# imports should go at the top
import csv

# notice we are importing datetime from datetime (we are importing the `datetime` type from the module datetime
import from datetime import datetime

# try to avoid globals where possible (they're not needed here)

def check_dates_in_csv(input_filepath):
    ''' function to load csv file and compare dates to todays date'''

    # create a list to store the rows which meet our criteria
    # appending the rows to this will make a list of lists (nested list)
    output_data = []

    # get todays date before loop to avoid calling now() every line
    # we only need this once and it'll slow the loop down calling it every row
    todays_date = datetime.now()

    # open your csv here using the function argument
    with open(input_filepath, output_filepath) as csv_file:
        reader = csv.reader(csv_file)

        # iterate over the rows and grab the date in each row
        for row in reader:
            string_date = row[5]

            # convert the string to a datetime object
            csv_date = datetime.strptime(string_date, '%d/%m/%Y')

            # compare the dates and append if it meets the criteria
            if csv_date <= todays_date:
                output_data.append(row)

         # function should only do one thing, compare the dates
         # save the output after
         return output_data

# then run the script here
# this comparison is basically the entry point of the python program
# this answer explains it better than I could: https://stackoverflow.com/questions/419163/what-does-if-name-main-do
if __name__ == "__main__":

    # use our new function to get the output data
    output_data = check_dates_in_csv("input_file.csv")

    # save the data here
    with open("output.csv", "w") as output_file:
        writer = csv.writer(output_file)
        writer.writerows(output_data)
2
RHSmith159 19 Agustus 2017, 19:12

Saya akan merekomendasikan untuk menggunakan Panda untuk tugas seperti ini:

import pandas as pd

filenameA ="ApptA.csv" 
filenameAc = "CheckoutA.csv"
today = pd.datetime.today()

df = pd.read_csv(filenameA, parse_dates=[5])
df.loc[df.iloc[:, 5] <= today].to_csv(filenameAc, index=False)
1
MaxU 19 Agustus 2017, 18:21