我仍在为 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
当年话下
相关分类