您好,我有多個 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:)
任何幫助將不勝感激。我無法上傳代碼,因為它有很多功能,而且找到這些位絕對是巨大的,對我來說需要很長時間。對于那個很抱歉。
uj5u.com熱心網友回復:
將rsplit和sorted方法與自定義函式一起使用,該函式執行一些檢查并用作排序比較的鍵。
你可以這樣嘗試:
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']
uj5u.com熱心網友回復:
該sorted函式采用一個名為的附加關鍵字引數key,該引數告訴它如何對iterable. 這個引數,key,是一個函式,它應該從輸入中獲取每個條目iterable并給它一個“排名”或“排序順序” -
在您的情況下,您需要定義一個key函式,將“無后綴”檔案放在“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)']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381482.html
下一篇:在CSS旋轉函式中使用CSS變數
