我仍在为 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
提交
取消