Python和Pandas-在不知道文件名的情况下读取目录中唯一的CSV文件

时间:2018-12-21 16:39:38

标签: python-3.x pandas

我正在整理一个Python脚本,该脚本使用熊猫从CSV文件中读取数据,对数据进行排序和过滤,然后将文件保存到其他位置。

这是我必须定期运行的事情-至少每周一次(如果不是每天一次)。原始文件每天都会更新,并放置在一个文件夹中,但是每天文件名都会更改,旧文件也会被删除,因此目录中只有一个文件。

我能够通过在脚本中指定文件位置和名称来完成所有这些工作,但是由于文件名每天都在变化,所以我宁愿不必每次都想运行时就编辑脚本它。

是否有一种仅基于位置读取文件的方法?如前所述,它是目录中的唯一文件。还是有办法在名称中使用通配符?文件名始终类似于:ABC_DEF_XXX_YYY.csv,其中XXXYYY每天更改。

感谢您的帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

from os import listdir

CSV_Files = [file for file in listdir('<path to folder>') if file.endswith('.csv')

如果文件夹中只有1个CSV文件,则可以

CSV_File = CSV_Files[0]

之后。

答案 1 :(得分:0)

假设dirName拥有存放文件的目录。

调用os.listdir(dirName)会在此目录中为您提供文件或子目录(当然,您必须更早import os)。

要将列表限制为仅文件,我们必须多写一些,例如

[f for f in os.listdir(dirName) if os.path.isfile(os.path.join(dirName, f))]

因此,我们有完整的文件列表。要获取第一文件,请将[0]添加到 上面的表达式,所以

fn = [f for f in os.listdir(dirName) if os.path.isfile(os.path.join(dirName, f))][0]

为您提供第一个文件的名称,但没有目录。

要获取完整路径,请使用os.path.join(dirname, fn)

因此,添加了适当扩展名检查的整个脚本可以是:

import os

dirName = r"C:\Users\YourName\whatever_path_you_wish"
fn = [f for f in os.listdir(dirName)\
    if f.endswith('.csv') and os.path.isfile(os.path.join(dirName, f))][0]
path = os.path.join(dirName, fn)

然后您可以例如打开此文件或根据需要使用它们。

编辑

如果给定的目录不包含任何文件,则上述程序将失败 带有所需的扩展名。为了使程序更强大,请将其更改为 如下所示:

fnList = [f for f in os.listdir(dirName)\
    if f.endswith('.csv') and os.path.isfile(os.path.join(dirName, f))]
if len(fnList) > 0:
    fn = fnList[0]
    path = os.path.join(dirName, fn)
    print(path)
    # Process this file
else:
    print('No such file')

答案 2 :(得分:0)

  

要仅根据位置获取文件名:

import os, glob
os.chdir("/ParentDirectory")
for file in glob.glob("*.csv"):
    print(file)