我仍在為 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
.?我已經在本地進行了測試,除了星號外沒有任何變化,而且效果很好。
添加回答
舉報
0/150
提交
取消