【问题标题】:How to find the path of files in a directory from a column of a CSV (PYTHON)如何从 CSV(PYTHON)的列中查找目录中文件的路径
【发布时间】:2014-07-18 23:13:39
【问题描述】:

我有一个 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) 

【问题讨论】:

    标签: python csv path find


    【解决方案1】:

    您的输出 CSV 为空白并不奇怪,或者更确切地说,您的输入 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。

    希望这会有所帮助!

    【讨论】:

    • 我还会将 if find_key != None: 行更改为 if find_key != None and find_key != []: 以避免输出 CSV 文件中出现空行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多