我正在编写代码以连续检查许多文件夹和目录中的文件大小。
例如:我有多个目录,每个目录中有多个文件,每个文件夹中也有多个文件。
我的代码必须像sample1.txt, sample2.txt, sampl3.txt
一样读取D:/coding/dir1/folder1
中的所有文件。
读取文件后,它应该转到D:/coding/dir1/folder2
并检查sample4.txt, sample5.txt, sample6.txt
等,当读取目录中的所有文件夹时,它应该跳转到另一个目录(如D:/coding/dir2/folder1
(。
让我知道我该如何实现这一目标。
D:/coding
- dir1
-- folder1
--- sample1.txt
--- sample2.txt
--- sample3.txt
-- folder2
--- sample4.txt
--- sample5.txt
--- sample6.txt
- dir2
-- folder1
--- sample7.txt
...
你可以编写一个递归函数,返回所有文件,然后读取它们:
import os
def read_folder(folder):
files = []
for f in os.listdir(folder):
f = os.path.join(folder, f)
if os.path.isdir(f):
files = [*files, *read_folder(f)]
else:
files.append(f)
return files
所以我有以下文件夹结构
D:coding
├───folder1
│ sample1.txt
│ sample2.txt
│
└───folder2
sample1.txt
sample2.txt
使用pathlib
查找文件,使用stat
函数获取文件大小。
from pathlib import Path
files = Path("D:/coding").rglob('*')
for f in files:
if f.is_file():
print(f'{str(f)} file size is : {f.stat().st_size}')
输出
D:codingfolder1sample1.txt file size is : 728
D:codingfolder1sample2.txt file size is : 2378
D:codingfolder2sample1.txt file size is : 247
D:codingfolder2sample2.txt file size is : 1486
我得到了解决方案。
import os
import re
import glob path1 = r'D:rmchal0xml'
os.chdir(path1)
print(os.getcwd())
listdir = os.listdir(path1)
print(listdir)
def txt_check(path):
os.chdir(path)
listdir = os.listdir(path)
for files in listdir:
if files.endswith('.txt'):
# txt_file= files.endswith('.txt')
file_size = os.path.getsize(files)
if file_size > 0:
print("this file has data: ", files, "with file size:", file_size, "in", os.getcwd())
print(listdir)
def file_size_check(path):
os.chdir(path)
print(os.getcwd())
listdir = os.listdir(path)
print(listdir)
for files in listdir:
if (files.find('.') == -1):
path2= os.path.join(path,files)
if files.lower()== 'nok':
print(files)
txt_check(path2)
else:
#path2 = os.path.join(path,files)
file_size_check(path2)
file_size_check(path1)