簡體   English   中英

如何對大量 csv 文件進行排序以按特定順序讀取它們?

[英]How to sort a lot of csv files to read them in a specific order?

您好,我有多個 csv 文件(很多)具有相同的名稱(文件名)但末尾有一個數字。 例如,我有 4 個 csv 文件具有相同的文件名,並且在第一個文件的末尾沒有多余的數字,但是對於第二個文件,末尾有一個 (0),第三個文件的末尾有 (1)文件名之類的......

我正在使用 pandas read 來讀取 for 循環中的文件,因為我在一個文件夾中有很多文件,並且我正在使用 sorted 對它們進行排序。 我遇到的問題是它對文件名進行了很好的排序,第一個文件也很好,但是當它最后有一個文件名(0)時我遇到了問題。 它放在最后,我想解決這個問題,因為這些單獨的文件一起擁有一個大文件的數據,我試圖自動連接它們。 一切正常,但排序順序不是我想要的,因此我有相同的文件連接(這是我想要的)但順序錯誤。

我該如何糾正這一點。 BTY 閱讀后我正在對列表中的文件進行排序,並且它以錯誤的順序排序,例如 ['filename','filename1','filname2','filename0']。 但我想要它 ['Filename','Filename0','Filename1','Filename2'] 按這個順序。

我知道列表中的文件名是字符串,我嘗試將它們轉換為 int 和 float 但我沒有成功我得到這個值錯誤(ValueError: invalid literal for int() with base 10:)

任何幫助將不勝感激。 我無法上傳代碼,因為它有很多功能,而且要找到這些位絕對是巨大的,這對我來說需要很長時間。 對於那個很抱歉。

將 rsplit 和 sorted 方法與自定義 function 一起使用,該方法會進行一些嘗試除外檢查。

你可以這樣嘗試:

def function_work(x):
    y = x.rsplit('.', 2)[-2]
    return ('log' not in x, int(y) if y.isdigit() else float('inf'), x)

csvFiles = ['Filename5.csv', 'Filename0.csv', 'Filename1.csv', 'Filename.csv', 'Filename2.csv']
print(sorted(csvFiles, key=function_work, reverse=False))
#output : ['Filename.csv', 'Filename0.csv', 'Filename1.csv', 'Filename2.csv', 'Filename5.csv']

sorted后的 function 需要一個名為key的附加關鍵字參數,告訴它如何對iterable中的項目進行排序。 這個參數key是一個 function 預期從輸入iterable中獲取每個條目並給它一個“等級”或“排序順序” -

在您的情況下,您需要定義一個key function 將“無后綴”文件放在“0”之前 -

lst = ['abc.csv', 'abc (0).csv', 'abc (1).csv']
filenames_split_lst = [_.rsplit('.', 1) for _ in lst]
# [['abc', 'csv'], ['abc (0)', 'csv'], ['abc (1)', 'csv']]
base_filenames = [_ for _, csv in filenames_split_lst]
# ['abc', 'abc (0)', 'abc (1)']

def sorting_function(base_filename):
    if (len(base_filename.split()) == 1):
        return 0
    elif len(base_filename.split()) == 2:
        number_suffix = base_filename.split()[1][1:-1]
        return int(number_suffix) + 1

sorted(base_filenames, key=sorting_function)
# ['abc', 'abc (0)', 'abc (1)']

暫無
暫無

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

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