簡體   English   中英

批量讀取csv文件。 閱讀器總是錯過同一行

[英]reading csv file in batches. Reader always misses the same line

我有一個簡單的 python 腳本,它以 5 個批次讀取csv文件。csv 文件總共包含 9 條記錄(不包括標題)。 下面的腳本以 5 個為一組讀取文件,但似乎總是跳過ID為 6 的記錄,我做錯了什么?

csv 文件:

"RIG_ID","STATUS_DATE"
"1","2019-04-10
"2","2019-04-11
"3","2019-04-12
"4","2019-04-13
"5","2019-04-14
"6","2019-04-15
"7","2019-04-16
"8","2019-04-17
"9","2019-04-18

Python 腳本:

batch_size = 5
transaction_count = 0

parameter_set = []

with open('test.csv', 'r') as file:
    reader = csv.DictReader(file, delimiter=',')

    for row in reader:

        entry = get_entry(row)

        if(len(parameter_set) == batch_size):
            execute_transaction(sql, parameter_set)

            transaction_count = transaction_count + 1
            print(f'Transaction count: {transaction_count}')

            parameter_set.clear()
        else:
            parameter_set.append(entry)
            
    # check if we have records that didn't fit into a batch (i.e. less than 5)
    if(len(parameter_set) > 0):
        execute_transaction(sql, parameter_set)
        transaction_count = transaction_count + 1
        print(f'Transaction count: {transaction_count}')

如果我在第一批完成后在該行entry = get_entry(row)上放置一個斷點,我會得到ID = 7 ,從而跳過 csv 中的第 6 行。

問題是,當您的if條件變為true時,您不會append entry您的parameter_set

len(parameter_set) == batch_size

清除parameter_set集后,您還需要append entry 所以我建議:

         if(len(parameter_set) == batch_size):
            execute_transaction(sql, parameter_set)

            transaction_count = transaction_count + 1
            print(f'Transaction count: {transaction_count}')

            parameter_set.clear()
            parameter_set.append(entry)
        else:
            parameter_set.append(entry)

或者為了避免重復代碼,您還可以將.append()移出 if-else-condition,因為它總是被執行。

       if(len(parameter_set) == batch_size):
            execute_transaction(sql, parameter_set)

            transaction_count = transaction_count + 1
            print(f'Transaction count: {transaction_count}')

            parameter_set.clear()
            
       parameter_set.append(entry)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM