在python中获取文件的完整路径

时间:2014-09-11 04:02:52

标签: python csv path os.walk

我试图在一系列目录中创建一个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)

1 个答案:

答案 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