前置知识:绝对路径和相对路径的区别
绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。
相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。
../ 表示当前文件所在的目录的上一级目录 ./ 表示当前文件所在的目录(可以省略) / 表示当前站点的根目录(域名映射的硬盘目录) 结论: 相对路径比较灵活,只要层级结构没有变化,那么不影响寻址; 绝对路径就要好好确认下路径有没有问题,你的程序需要在不同的设备中来回移动的话,必须用相对路径,因为你换设备就会改变绝对路径,就类似于你用u盘的时候,你的盘符都不是固定的一个道理。
一句话总结的话: 绝对路径就是写死的路径,缺点是换设备会出现路径找不到问题 相对路径就是灵活的路径,优点是不会因为设备更换出现路径问题
Python需要明确的函数
os.listdir(path)
此方法返回一个列表,其中包含有指定路径下的目录和文件的名称
os.path.isdir(path)
判断传入的参数是否是目录(文件夹)
os.path.isfile(path)
判断传入的参数是否是文件
注意:os.path.isdir(path)和os.path.isfile(path)需要传入的参数是绝对路径, 但是os.listdir(path)返回的只是一个某个路径下的文件和列表的名称.**
常见错误:直接使用os.listdir()的返回值当做os.path.isdir(path)和os.path.isfile(path)的入参
正确用法:需要先使用python路径拼接| os.path.join(path1[, path2[, ...]]) |函数,将os.listdir(path)返回的名称拼接成文件或目录的绝对路径再传入os.path.isdir(path)和os.path.isfile(path)
Python 循环的高级用法
带有if判断的循环
在 for 语句后面跟上一个 if 判断语句,用于过滤掉那些不满足条件的结果项。
通用语法:
newList = [expression for x in list if condition]
带有for嵌套
在复杂一点的列表推导式中,可以嵌套有多个 for 语句。按照从左至右的顺序,分别是外层循环到内层循环。
通用语法:
[ expression for x in XList for y in YList ]
既有if语句又有for嵌套
列表推导式可以带任意数量的嵌套 for 循环,并且每一个 for 循环后面都有可选的 if 语句。
通用语法:
[ expression for x in X [if condition]
for y in Y [if condition]
...
for n in N [if condition] ]
代码
好了,废话不多说,知道你们也不爱看,直接上代码
import os,sys
# 获取程序所在的路径
path = os.path.dirname(os.path.abspath(sys.argv[0]))
# 获取文件名
file_names = os.listdir(path)
# python 循环高级用法 [expression for x in XX if condition]
# 先从XX进行遍历,每一个x要根据condition判断,满足条件执行expression
# file[-4:] == '.csv' 这里可以替换改为其他需要的文件类型
file_list = [os.path.join(path,file) for file in file_names if os.path.isfile(os.path.join(path,file)) and file[-4:] == '.csv']
print(file_list)