在Python办公自动化的时候,经常会对本地文件进行一些操作。
这里介绍几种方法,可以快速获取对应文件夹下的文件,返回一个列表。
然后就可以用列表的切片方式,把列表里的文件名取出来,再进行操作。
方法1:
import os
import pandas as pd
path = r'D:\code\MyProject\百度OCR\IDcard\images'
def findAllFile(base):
for root, dirs, files in os.walk(base):
for f in files:
yield base +'\\'+ f
fa = findAllFile(path)
file_list = []
for i in range(len(os.listdir(path))):
f = next(fa)
file_list.append(f)
#这里的file_list就是存放文件名的列表了。
# 简单的例子,把文件名存储到csv文件中
df = pd.DataFrame(file_list, columns=['file_name'])
df.to_csv('file_list.csv', index=False)
运行之后得到CSV文件,打开后如下:
方法2
import os
import pandas as pd
path = r'D:\code\MyProject\百度OCR\IDcard\images'
file_list_2 = []
for i in range(len(os.listdir(path))):
file_list_2.append(os.path.join(path, os.listdir(path)[i]))
#这里的file_list_2就是存放文件名的列表了。
# 简单的例子,把文件名存储到csv文件中
df = pd.DataFrame(file_list_2, columns=['file_name'])
df.to_csv('file_list2.csv', index=False)
运行之后得到CSV文件,打开后如下:
方法3
import os
import pandas as pd
path = r'D:\code\MyProject\百度OCR\IDcard\images'
file_name = os.listdir(path)
file_list_3 = []
for i in range(len(file_name)):
f = path + '\\' + file_name[i]
file_list_3.append(f)
#这里的file_list_3就是存放文件名的列表了。
# 简单的例子,把文件名存储到csv文件中
df = pd.DataFrame(file_list_3, columns=['file_name'])
df.to_csv('file_list3.csv', index=False)
作用跟上面的效果一样,不再截图
方法4
file_list_4 = []
for root, dirs, files in os.walk(path):
for file in files:
f = path +'\\' + file
file_list_4.append(f)
df = pd.DataFrame(file_list_4, columns=['file_name'])
df.to_csv('file_list4.csv', index=False)
作用跟上面的效果一样,不再截图
方法5
file_list_5 = []
for root, dirs, files in os.walk(path):
for file in files:
file_list_5.append(os.path.join(root, file))
df = pd.DataFrame(file_list_5, columns=['file_name'])
df.to_csv('file_list5.csv', index=False)
作用跟上面的效果一样,不再截图
其中:
1、是用了yield,然后把结果next()出来
2、主要用os.listdir()函数
3、和2原理一样,跟2的区别在于路径+文件名的拼装的方式不一样
4、是用了os.walk()函数
5、是用了os.walk()函数,跟4的区别在于路径+文件名的拼装的方式不一样
写法都比较简单,没什么推荐用法。以后有空可以试试测一下效率。
最后:
以上几种方法可以获取文件夹下面的文件,并把文件名称组成一个列表。
但是,如果images文件夹下还有文件夹,就会出问题。
也有办法去捕获异常或者做一些判断避免这些错误。但是会增加代码复杂度。为了代码的简洁易读,建议就用多个文件夹做物理上的分离:images文件夹只放文件,不要放目录。