亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 OOP 獲取目錄中的文件不起作用

通過 OOP 獲取目錄中的文件不起作用

holdtom 2023-04-11 15:21:46
我仍在為 OOP 的想法而苦苦掙扎,但這是我的嘗試。我已經搜索過 StackOverflow 或 OOP 閱讀資料,但沒有一個能給我答案,所以我向你尋求幫助!背景我試圖將目錄中所有 .csv 文件的名稱放入列表中,并最終通過 pandas 操作它們。問題是在進行 for 循環glob.iglob(os.path.join(dir, ".csv")并獲取特定于這些文件的名稱并將其附加到 class 中聲明的列表中時Initial(),我希望在打印時出現文件名稱以及 .csvinit.lst但相反,它給了我一個空列表。我的代碼class Initial():    def __init__(self):        self.lst = []        self.params = []        self.bad_temp = []        self.bad_offsetn = []        self.bad_offsetp = []        self.bad_IT = []        self.choicefile = []        self.finalfile = []    def get_path(self):        while True:            dir = input("Paste full path to directory here: ")            #print(dir)            print(os.path.isdir(dir))            if os.path.isdir(dir) == True:                for files in glob.iglob(os.path.join(dir, ".csv")):                    print(files)                    longname = os.path.basename(files)                    self.lst.append(longname)                return self.lst                break            else:                print('\n')                print('Sorry that is not a valid path/directory. Please try again.')                continue我試過的我已經嘗試打印我可以打印的代碼的每個部分。一切正常直到打印dir,但它以某種方式沒有注冊 for 循環。我嘗試使用此代碼,這是獲取目錄中文件列表的另一種方法。onlyfiles = [f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f))]. 這行得通,它打印了我需要的東西,我可能可以調整它以僅獲取 .csv 文件,但我不認為我可以休息,直到我明白我最初嘗試做錯了什么。我也嘗試過將函數移出類或完全刪除函數以僅使用init.lst但它仍然返回空。(是的,我導入了 os 和 glob)我對此的看法我認為我的問題是是否.lst申報__init__。但是根據我的理解,這并不重要,因為它變成了需要self.調用 a 的實例化變量。正如函數是在類本身內部定義的一樣,它需要我self.lst作為代碼的一部分使用。但是,一旦我超越類并開始在外部使用它,我就必須將一個對象附加到它,該對象創建要調用的實例。因為我認為我是對的,因為它不起作用,所以我知道我錯了,因此被卡住了。如果我措辭怪異或者我的理解有誤,請原諒我。如果是這樣的話,如果你能糾正我,我將不勝感激。預先感謝您幫助我以及耐心地教我!解決了正如@Codesidian 所指出的,for files in glob.iglob(os.path.join(dir, ".csv")):它缺少開始搜索的模式。所以正確的代碼應該是在之前添加for files in glob.iglob(os.path.join(dir, "* .csv")):by 的地方。謝謝@Codesidian!*.csv
查看完整描述

1 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

這一行:

for?files?in?glob.iglob(os.path.join(dir,?".csv")):

具體來說:

不進行波浪號擴展,但 *、? 和用 [] 表示的字符范圍將被正確匹配。

您輸入到函數中的是dir/.csv.?那不是一個模式。你應該添加的是:

for?files?in?glob.iglob(os.path.join(dir,?"*.csv")):

那將是用dir/*.csv.?我已經在本地進行了測試,除了星號外沒有任何變化,而且效果很好。


查看完整回答
反對 回復 2023-04-11
  • 1 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號