如何从CSV的列中找到目录中文件的路径(PYTHON)

0 投票
1 回答
858 浏览
提问于 2025-04-18 13:55

我有一个CSV文件,其中有一列包含多个值。我想在一个根目录下,查找所有子目录中,文件名以每个值开头的文件,并返回这些文件的路径,然后把它们写入一个CSV文件中。例如:如果这一列的第一个值是'linux',那么如果我有两个文件分别叫'linux01.jpg'和'linuximg.jpg',这个函数就应该返回这两个文件的路径,并把它们写入CSV文件。现在我有的代码是这样的,但我的CSV文件是空的。谢谢。

import csv
import os, fnmatch


def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, pattern):
                result.append(os.path.join(root, name))
    return result

ifile = open('carte.csv', 'rb')
reader = csv.reader(ifile)
ofile = open('output.csv', 'wb')
writer = csv.writer(ofile, delimiter='\t')
for row in reader:
    find_key = find(row[3], '/home/ro/Desktop/search/IDBUF')
    if find_key != None:
        writer.writerow(find_key) 

1 个回答

0

你的输出CSV文件是空的,或者说每一行都只包含一个换行符,这并不奇怪。

问题出在这一行:

find_key = find(row[3], '/home/ro/Desktop/search/IDBUF')

在你的例子中,row[3] 的值是 'linux',所以你只会找到名字完全是 'linux' 的文件。如果你想找到所有名字可以是 'linux01.jpg''linuximg.jpg' 的文件,你需要把前面的那一行改成:

find_key = find('*' + row[3] + '*', '/home/ro/Desktop/search/IDBUF')

另一种解决办法是在你的输入CSV文件中写 *linux*,而不是 linux

希望这能帮到你!

撰写回答