如何从CSV的列中找到目录中文件的路径(PYTHON)
我有一个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
。
希望这能帮到你!