我试图在一系列目录中创建一个ws文件路径的csv。每行应对应一个目录。一行中的每个单元格都应包含单个文件的路径。下面的脚本是"几乎"工作。它创建一个CSV,文件为单元格。但是,os.path.realpath和os.path.abspath不包含文件的直接父目录。所以,而不是" /root/directory/file.wav"。我得到" /root/file.wav"。
import fnmatch
import os
import csv
with open('filelist.csv', 'wb') as csvfile:
lister = csv.writer(csvfile, delimiter=',')
for root, dirnames, filenames in os.walk(os.getcwd()):
matches = []
for filename in fnmatch.filter(filenames, '*.wav'):
matches.append(os.path.realpath(filename))
if len(matches) > 0:
print matches
lister.writerow(matches)
答案 0 :(得分:1)
您需要join
root
路径获取当前目录的相对路径,然后您可以调用abspath
。*
您可以在文档中os.walk
的每个示例中看到这一点,例如:
import os
for root, dirs, files in os.walk(top, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
os.rmdir(os.path.join(root, name))
所以,对于你的代码:
with open('filelist.csv', 'wb') as csvfile:
lister = csv.writer(csvfile, delimiter=',')
for root, dirnames, filenames in os.walk(os.getcwd()):
matches = []
for filename in fnmatch.filter(filenames, '*.wav'):
matches.append(os.path.abspath(os.path.join(root, filename)))
if len(matches) > 0:
print matches
lister.writerow(matches)
*或者,您可以使用绝对路径启动walk
,而不必每个文件abspath
......但前提是您了解符号链接的含义并对此感到满意。如果您不知道,请在每个文件上使用abspath
。