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

Python 3.x Python和Pandas—在不知道文件名的情况下读取目录中唯一的CSV文件,python-3.x,pandas,Python 3.x,Pandas,我正在编写一个Python脚本,它使用pandas从CSV文件中读取数据,对数据进行排序和过滤,然后将文件保存到另一个位置 这是我必须经常做的事情——如果不是每天,至少每周做一次。原始文件每天更新并放置在文件夹中,但每天文件名都会更改,旧文件会被删除,因此目录中只有一个文件 我可以通过在脚本中指定文件位置和名称来完成所有这些工作,但是由于文件的名称每天都在更改,因此我不希望每次运行脚本时都必须编辑它 是否有一种仅基于位置读取该文件的方法?正如我提到的,它是目录中唯一的文件。或者有没有办法在名称中

我正在编写一个Python脚本,它使用pandas从CSV文件中读取数据,对数据进行排序和过滤,然后将文件保存到另一个位置

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

我可以通过在脚本中指定文件位置和名称来完成所有这些工作,但是由于文件的名称每天都在更改,因此我不希望每次运行脚本时都必须编辑它

是否有一种仅基于位置读取该文件的方法?正如我提到的,它是目录中唯一的文件。或者有没有办法在名称中使用通配符?文件的名称始终类似于:
ABC_DEF_XXX_YYY.csv
where
XXX
YYY
每天更改

谢谢你的帮助。谢谢

from os import listdir

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


之后。

假设
dirName
保存保存文件的目录

调用
os.listdir(dirName)
将为您提供此目录中的文件或子目录(当然,您必须更早地
导入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')

假设
dirName
包含保存文件的目录

调用
os.listdir(dirName)
将为您提供此目录中的文件或子目录(当然,您必须更早地
导入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')
要仅根据位置获取文件名,请执行以下操作:

要仅根据位置获取文件名,请执行以下操作:


回答如何使用.txt文件执行此操作。该过程应与.csv文件相同。答案可能重复。如何使用.txt文件执行此操作。该过程应与.csv文件相同。可能重复感谢大家的回复!我现在可以让它工作了。非常感谢你的帮助!谢谢大家的回复!我现在可以让它工作了。非常感谢你的帮助!