我仍在為 OOP 的想法而苦苦掙扎,但這是我的嘗試。我已經(jīng)搜索過(guò) StackOverflow 或 OOP 閱讀資料,但沒(méi)有一個(gè)能給我答案,所以我向你尋求幫助!背景我試圖將目錄中所有 .csv 文件的名稱(chēng)放入列表中,并最終通過(guò) pandas 操作它們。問(wèn)題是在進(jìn)行 for 循環(huán)glob.iglob(os.path.join(dir, ".csv")并獲取特定于這些文件的名稱(chēng)并將其附加到 class 中聲明的列表中時(shí)Initial(),我希望在打印時(shí)出現(xiàn)文件名稱(chēng)以及 .csvinit.lst但相反,它給了我一個(gè)空列表。我的代碼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我試過(guò)的我已經(jīng)嘗試打印我可以打印的代碼的每個(gè)部分。一切正常直到打印dir,但它以某種方式?jīng)]有注冊(cè) for 循環(huán)。我嘗試使用此代碼,這是獲取目錄中文件列表的另一種方法。onlyfiles = [f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f))]. 這行得通,它打印了我需要的東西,我可能可以調(diào)整它以?xún)H獲取 .csv 文件,但我不認(rèn)為我可以休息,直到我明白我最初嘗試做錯(cuò)了什么。我也嘗試過(guò)將函數(shù)移出類(lèi)或完全刪除函數(shù)以?xún)H使用init.lst但它仍然返回空。(是的,我導(dǎo)入了 os 和 glob)我對(duì)此的看法我認(rèn)為我的問(wèn)題是是否.lst申報(bào)__init__。但是根據(jù)我的理解,這并不重要,因?yàn)樗兂闪诵枰猻elf.調(diào)用 a 的實(shí)例化變量。正如函數(shù)是在類(lèi)本身內(nèi)部定義的一樣,它需要我self.lst作為代碼的一部分使用。但是,一旦我超越類(lèi)并開(kāi)始在外部使用它,我就必須將一個(gè)對(duì)象附加到它,該對(duì)象創(chuàng)建要調(diào)用的實(shí)例。因?yàn)槲艺J(rèn)為我是對(duì)的,因?yàn)樗黄鹱饔?,所以我知道我錯(cuò)了,因此被卡住了。如果我措辭怪異或者我的理解有誤,請(qǐng)?jiān)徫?。如果是這樣的話(huà),如果你能糾正我,我將不勝感激。預(yù)先感謝您幫助我以及耐心地教我!解決了正如@Codesidian 所指出的,for files in glob.iglob(os.path.join(dir, ".csv")):它缺少開(kāi)始搜索的模式。所以正確的代碼應(yīng)該是在之前添加for files in glob.iglob(os.path.join(dir, "* .csv")):by 的地方。謝謝@Codesidian!*.csv
1 回答

當(dāng)年話(huà)下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
這一行:
for?files?in?glob.iglob(os.path.join(dir,?".csv")):
具體來(lái)說(shuō):
不進(jìn)行波浪號(hào)擴(kuò)展,但 *、? 和用 [] 表示的字符范圍將被正確匹配。
您輸入到函數(shù)中的是dir/.csv
.?那不是一個(gè)模式。你應(yīng)該添加的是:
for?files?in?glob.iglob(os.path.join(dir,?"*.csv")):
那將是用dir/*.csv
.?我已經(jīng)在本地進(jìn)行了測(cè)試,除了星號(hào)外沒(méi)有任何變化,而且效果很好。
添加回答
舉報(bào)
0/150
提交
取消