为了账号安全,请及时绑定邮箱和手机立即绑定

通过 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 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信