Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Glob打印丢失文件列表_Python_Glob - Fatal编程技术网

Python Glob打印丢失文件列表

Python Glob打印丢失文件列表,python,glob,Python,Glob,我错过了什么 我正在尝试打印丢失文件的列表,例如,我使用“WorhSheet_X”和“WorhSheet_Y”作为预期文件,如果文件夹中有丢失的文件,我希望能够打印丢失文件的名称 否则,这就是为什么我要尝试创建一个代码,当有丢失的文件时自动发送一封电子邮件,并且在电子邮件的正文上有丢失的文件名 import glob dir_to_search = r'G:\folder' files_in_dir = glob.glob("{}{}".format(dir_to_search,'*.xls

我错过了什么

我正在尝试打印丢失文件的列表,例如,我使用“WorhSheet_X”和“WorhSheet_Y”作为预期文件,如果文件夹中有丢失的文件,我希望能够打印丢失文件的名称

否则,这就是为什么我要尝试创建一个代码,当有丢失的文件时自动发送一封电子邮件,并且在电子邮件的正文上有丢失的文件名

import glob

dir_to_search = r'G:\folder'

files_in_dir = glob.glob("{}{}".format(dir_to_search,'*.xls?'))

list_of_files = glob.glob('WorkSheet_X*','WorkSheet_Y*', recursive=True)

missing_files = [x for x in list_of_files if x not in files_in_dir]

print(missing_files)
出现错误:

Traceback (most recent call last): ...
list_of_files = glob.glob('WorkSheet_X*','WorkSheet_Y*', recursive=True)
TypeError: glob() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given
编辑:


我需要搜索部分名称为“工作表\u X*”的文件,因为每天在“工作表\u X”中的“X”之后都有不同的日期。

您正在比较存在于不同目录中的文件的完整路径名,因为现在的代码是,您正在当前工作目录中搜索patterns WorkSheet_X*和WorkSheet_Y*,这将不同于
dir_to_search
(如果不是,我不确定此程序的意义是什么)。无论如何,此代码允许当前工作目录是除
dir\u to\u search
之外的某个目录。因此,这段代码拆分文件的完整路径名,只比较文件名,并尝试进行一些优化(以及对代码的更正):

如果我们讨论的是在
dir\u to\u search
目录中构成模式
'*.xls?
的大量文件,那么最好不要在\u dir集合中创建
文件,而是为每个候选文件执行目录查找:

missing_files = [f for f in list_of_files if not os.path.isfile(os.path.join(dir_to_search, os.path.split(f)[1]))]

然而,有一个微妙的区别。假设我们找到一个名为
工作表_X1.csv
的文件,它确实存在于
dir\u to\u search
目录中。第一个方法将显示为缺少,因为它与模式
*.xls?
不匹配。但是,由于它存在于正确的目录中,因此使用第二种方法不会将其报告为丢失。所使用的glob模式真的应该是
“工作表\u X*.xls吗?”

glob只采用一条路径,您需要分别进行两次搜索-一次搜索以
工作表\u X开始的任何内容,另一次搜索
工作表\u Y
,然后合并这两个列表。Glob不能使用两个路径,这就是为什么它说它有两个位置参数。一次只能将一个文件规范传递给
Glob
,可以是“工作表_X*”或“工作表_Y*”,但不能同时传递这两个文件规范。但你的整个问题有点不清楚。您是否试图确定与当前目录中的模式
工作表\u X*
匹配的文件及其任何子目录不在
xls
文件中的
G:\folder
?因为这似乎是您的代码正在尝试做的。正如其他人所说,您无法使用
glob
一次匹配两件事。但是也许你可以使用
[]
语法在同一个地方匹配不同的东西:
工作表\uxy]*
。我应该做些什么来只搜索文件夹而不是子文件夹?我现在很忙,不能测试代码,但一旦测试它,如果它适合我,我会尽快回复你!谢谢你的支持!!!
missing_files = [f for f in list_of_files if not os.path.isfile(os.path.join(dir_to_search, os.path.split(f)[1]))]