python - 如何列出csv文件中的目录
问题描述
我正在尝试在 csv 中列出目录名称和文件名称以及 mp4 文件和空目录。我得到了输出,但它打印了很多次。有什么帮助吗?提前致谢。
import csv
import os
import sys
with open('Files.csv', 'w', newline='') as f:
fieldnames = ['Foldername', 'Filename','mp4filelist','Empty folders']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for dirpath, dirnames, files in os.walk(sys.argv[1]):
for file_name in files:
for root, dirs, files in os.walk(sys.argv[1]):
for file in files:
if(file.endswith(".mp4")):
listmp4 = (os.path.join(root,file))
listOfEmptyDirs = [dirpath for (dirpath, dirnames, filenames) in os.walk(sys.argv[1]) if len(dirnames) == 0 and len(filenames) == 0]
for elem in listOfEmptyDirs:
writer.writerow({'Foldername' : f'{dirpath}', 'Filename' : file_name, 'mp4filelist' : listmp4, 'Empty folders' : listOfEmptyDirs })
解决方案
在您的代码中,您两次遍历目录,这就是您有多个条目的原因
仅供参考os.walk(sys.argv[1])
,递归解析目录,因此您无需再次调用它
我从您的要求中得到的是,您需要 mp4 文件名和目录路径,一列用于 mp4 文件列表,另一列用于空目录列表,因此您可以这样做:
import csv
import os
import ctype
def has_hidden_attribute(filepath):
try:
attrs = ctypes.windll.kernel32.GetFileAttributesW(unicode(filepath))
assert attrs != -1
result = bool(attrs & 2)
except (AttributeError, AssertionError):
result = False
return result
with open('Files.csv', 'w') as f:
fieldnames = ['Foldername', 'Filename', 'mp4filelist', 'Empty folders']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
listOfEmptyDirs = []
for dirpath, dirnames, files in os.walk(sys.argv[1]):
print(dirpath, dirnames, files)
listmp4 = [os.path.join(dirpath, file) for file in files if file.endswith(".mp4")]
if len(dirnames) == 0 and len(files) == 0 and has_hidden_attribute(dirpath):
listOfEmptyDirs.append(dirpath)
for filename in files:
writer.writerow({'Foldername': str(dirpath), 'Filename': filename, 'mp4filelist': listmp4,
'Empty folders': listOfEmptyDirs})
推荐阅读
- r - 有没有办法通过 R 中的数学运算合并两个数据帧?
- excel-formula - 将行中的文本与列中的文本匹配
- redirect - 使用 Router::Redirect 对 Cakephp 2 进行 301 重定向
- javascript - 将 dropzone 与正常形式集成
- python - 在模态运算符事件计时器中,为什么更改更新秒数没有任何区别
- html - 制作导航栏的项目 html
- java - 为什么 setAutoCommit(false) 在 JDBC 中不起作用?
- javascript - How to make a function to wait for an async function to resolve in node js?
- c# - ASP.NET MVC Razor 在区域中找不到视图
- flutter - 如何在状态变化时保持新的 TextFormField 值?