昨天我们用python将所有csv文件写入数据库,进行数据保存供后续提取分析用,程序中有段代码是获取当前文件夹下的所有文件,这里单独提出来说明下哈:
-
for folderName, subfolders, filenames in os.walk(path)
主要用到的是os.walk这个函数,这个函数返回的是当前文件夹名称,子文件夹名以及当前文件夹下的所有文件名这三个值,然后每个值都是一个列表的形式,所以我们用for循环一下当前文件夹下所有文件;
-
if '.csv' in file_name and file_name not in rf_content
这一句主要作用是提取出.csv为后缀的文件,然后这个文件还不能在rf_content中存在;
那这个rf_content是什么呢?答案就是前面已经写入数据库的所有文件名称,这个rf_content是调用read_txt(filename_txt)获取的;
所以还有个函数write_txt(filename, filename_list),就是将本次写入数据库的文件名添加到txt文件中,避免下次重复写入。
# 读txt文件,这个txt里面存的上次写入数据库的所有文件名
def read_txt(filename):
if os.path.exists(filename):
rf = open(filename, 'r')
rf_content = rf.read()
rf.close()
return rf_content
else:
return []
# 程序运行的最后把本次写入数据库的所有csv文件名 写入txt文件,防止下次重复写入
def write_txt(filename, filename_list):
wf = open(filename, 'a')
for i in filename_list:
wf.write(i + '\n')
wf.close()
# 该函数的作用是获取所有csv文件名,用filename_list存储并返回
def get_all_csv_name(path, filename_txt):
rf_content = read_txt(filename_txt)
filename_list = []
for folderName, subfolders, filenames in os.walk(path):
for file_name in filenames:
if '.csv' in file_name and file_name not in rf_content:
filename_list.append(file_name)
return filename_list