使用Python计算文件夹和子文件夹中所有文件中的文本行数
我有一个巨大的文件夹,其中包含子文件夹和多个.sql文件。我想获得每个.sql文件中的代码行数。这就是我尝试过的:使用Python计算文件夹和子文件夹中所有文件中的文本行数,python,python-3.x,Python,Python 3.x,我有一个巨大的文件夹,其中包含子文件夹和多个.sql文件。我想获得每个.sql文件中的代码行数。这就是我尝试过的: import os import glob os.chdir("path of folder") names=[] for fn in glob.glob("*.sql"): with open(fn) as f: names[fn]=sum(1 for line in f if line.strip() and not line.startswith('#'))
import os
import glob
os.chdir("path of folder")
names=[]
for fn in glob.glob("*.sql"):
with open(fn) as f:
names[fn]=sum(1 for line in f if line.strip() and not line.startswith('#'))
print(names)
但是我得到的输出是[]。你们能帮我找出哪里出了问题吗
我知道如何使用“num_line”计算单个文件中的代码行数。我不能为每个文件手动执行此操作,需要加快进程 试试这个:
sql_folder_path = "full/path/to/sql/folder"
sql_files = [join(sql_folder_path, f) for f in listdir(sql_folder_path) if isfile(join(sql_folder_path, f)) and f.endswith(".sql")]
files_stats = {}
for file in sql_files:
with open(file) as f:
files_stats[file]=sum(1 for line in f if line.strip() and not line.startswith('#'))
print(files_stats)
以下版本的代码适用于目标目录中的文件,但不适用于子文件夹:
import os
import glob
os.chdir("foo")
names = {}
for fn in glob.glob("*.sql"):
with open(fn) as f:
names[fn] = sum(1 for line in f if line.strip() and not line.startswith('#'))
print(names)
具有较新的pathlib
的版本也可以递归工作:
#!/usr/bin/env python3
from pathlib import Path
target = Path("foo")
names = {}
for file in target.glob("**/*.sql"):
with file.open("rt") as f:
names[f.name] = sum(
1 for line in f
if line.strip() and not line.startswith('#')
)
print(names)
通过将
recursive
标志设置为True
并将***/
添加到路径:glob.glob(***/.sql,recursive=True)
,还可以使glob.glob
递归。