我正在整理一个Python脚本,该脚本使用熊猫从CSV文件中读取数据,对数据进行排序和过滤,然后将文件保存到其他位置。
这是我必须定期运行的事情-至少每周一次(如果不是每天一次)。原始文件每天都会更新,并放置在一个文件夹中,但是每天文件名都会更改,旧文件也会被删除,因此目录中只有一个文件。
我能够通过在脚本中指定文件位置和名称来完成所有这些工作,但是由于文件名每天都在变化,所以我宁愿不必每次都想运行时就编辑脚本它。
是否有一种仅基于位置读取文件的方法?如前所述,它是目录中的唯一文件。还是有办法在名称中使用通配符?文件名始终类似于:ABC_DEF_XXX_YYY.csv
,其中XXX
和YYY
每天更改。
感谢您的帮助。谢谢!
答案 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)