【问题标题】:Using Glob to get filenames with partial name inside folder to a list使用 Glob 将文件夹内的部分名称的文件名获取到列表中
【发布时间】:2019-01-30 15:32:04
【问题描述】:

我有几个格式相同但值不同的文件。 在 StackOverflow 用户的帮助下,我运行了代码,但现在我正在尝试优化它,我需要一些帮助才能做到这一点。

这是完整的代码:

import pandas as pd

# filenames
excel_names = ["file-JAN_2019.xlsx", "example-JAN_2019.xlsx", "stuff-JAN_2019.xlsx"]

# read them in
excels = [pd.ExcelFile(name) for name in excel_names]

# turn them into dataframes
frames = [x.parse(x.sheet_names[0], header=None,index_col=None) for x in 
excels]
#frames = [df.iloc[20:, :] for df in frames]
frames_2 = [df.iloc[21:, :] for df in frames[1:]]
#And combine them separately
combined = pd.concat([frames[0], *frames_2])

# concatenate them..
#combined = pd.concat(frames)
combined = combined[~combined[4].isin(['-'])]
combined.dropna(subset=[4], inplace=True)

# write it out
combined.to_excel("c.xlsx", header=False, index=False)

我尝试使用的代码如下:

from glob import glob

excel_names = glob.glob('*JAN_2019-jan.xlsx')

files = []
for names in (excel_names):
   files.extend(names)

print(files)

此时我收到以下错误: 回溯(最近一次通话最后): 文件“finaltwek.py”,第 4 行,在 excel_names = glob.glob('*JAN_2019-jan.xlsx') AttributeError: 'function' 对象没有属性 'glob'

但在我调整代码时,我也让代码运行,但它找到了文件夹中的所有文件,我只需要最后具有相同名称的文件,包括扩展名

我试图通过使其查找以相同方式结束并位于同一文件夹中的所有文件来使代码更具动态性,但由于某种原因,我无法使其工作,有人可以帮忙吗? 谢谢

【问题讨论】:

  • import glob 而不是 from glob import glob
  • 目前错误消失了,但它返回一个空列表,知道为什么@Maurice Meyer?
  • 检查您的工作目录。 excel 文件在那个位置吗?
  • 是的,我确信,当我运行未调整的代码时,它运行良好,但我需要查看文件,在代码中指定它们。在任何给定时间,我可以拥有 100 个文件,我需要找到一种方法来做到这一点,而无需输入所有文件的名称---

标签: python glob


【解决方案1】:

glob.glob("*JAN_2019-jan.xlsx") 将在 Python 解释器所在的目录中进行搜索。
您可以通过使用os.path.join(...)os.path.dirname(__file__) 指向脚本的目录来轻松构建文件路径:

import os
import glob

excel_names = glob.glob(os.path.join(os.path.dirname(__file__), '*JAN_2019-jan.xlsx'))
print execel_names

为我打印:

['/tmp/ex-JAN_2019-jan.xlsx']

【讨论】:

    【解决方案2】:

    如果你想使用 glob.glob() 那么你应该调用

    import glob
    #then use 
    file_names = glob.glob('*.xlxs')
    

    在您的代码中,您正在从 glob 文件中导入 glob 函数。在这种情况下,您不能使用 glob.glob()。对于您的代码:

    from glob import glob
    excel_names = glob('*JAN_2019-jan.xlsx')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2012-09-26
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多