python - 如何获取包含子目录的目录中文件的文件路径?
问题描述
以前回答过,但流行答案的代码在 Windows 上不起作用。
我正在学习 python 并尝试编写一个 scipt 来计算 .NET 项目中的代码行数。
使用我的目录结构,它发现的不是所有文件,而是少数文件,该项目位于此处:
https://github.com/stax76/mpv.net
脚本如下所示:
import os
root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"
allLines = []
for path, subdirs, files in os.walk(root):
for name in files:
filepath = os.path.join(path, name)
if not filepath.endswith( ('.cs','.vb') ):
break
with open(filepath) as f:
lines = f.read().splitlines()
for line in lines:
allLines.append(line)
print(len(allLines))
解决方案
在您的情况下,问题是break
,如果文件不以 .cs 或 .vb 结尾,您只需跳过目录,您需要将其更改continue
为如下:
import os
root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"
allLines = []
for path, subdirs, files in os.walk(root):
for name in files:
filepath = os.path.join(path, name)
if not filepath.endswith( ('.cs','.vb') ):
continue
with open(filepath) as f:
lines = f.read().splitlines()
for line in lines:
allLines.append(line)
print(len(allLines))
此代码还可以得到改进:
import os
root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"
allLines = 0
for path, subdirs, files in os.walk(root):
for name in files:
if not filepath.endswith( ('.cs','.vb') ):
continue
filepath = os.path.join(path, name)
with open(filepath) as f:
lines += len(f.read().splitlines())
print(allLines)
推荐阅读
- c++ - 洗牌的简单方法
- jsr352 - Jsr 352 - 无论状态如何都强制步骤
- sql - 需要根据 oracle 中的传入值更新列
- azure - 如何在 Azure 函数中获取 AccessToken 和声明
- mongodb - Mongo Mdbc powershell
- ios - 在“cordova prepare”之后,xCode 不断无法在我的手机上安装应用程序
- postgresql - Postgresql 条件排序由多种情况
- android - 片段分离/附加的 Viewpager 意外行为
- mysql - mysql选择值匹配存在或不存在的地方
- amazon-dynamodb - DynamoDB 对具有 @DynamoDBVersionAttribute 注释的属性没有值的现有项目进行条件检查