问题描述
你如何解释代码?
[file for file in os.listdir(folder_dir) if file.find("xlsx") != -1]
解决方法
如果字符串中没有出现find
,字符串-1
函数会自动给出if
。所以您的代码正在执行一个条件(xlsx
语句)来检查 str.find
是否在字符串中。
>>> a = '123abc'
>>> a.find('a')
3
>>> a.find('Something that is not in the string')
-1
>>>
函数用于查找字符串中子字符串的索引。
这是一个例子:
s[start:end]
如documentation中所述:
返回在切片 -1
中找到子字符串 sub 的字符串中的最低索引。可选参数 start 和 end 被解释为切片符号。如果未找到 sub,则返回 LocalTime
。
观察代码片段使用 list comprehension 循环遍历 folder_dir
中的文件。
对于每个这样的 file
,我们使用 str.find
检查文件名是否包含子字符串 xlsx
。
如果子串出现在字符串中,则返回出现在字符串中的第一个索引,否则返回-1
。
来自 Python 文档:
返回字符串中找到子字符串 sub 的最低索引
在切片 s[start:end]
内。可选参数开始和结束是
解释为切片符号。如果未找到 sub,则返回 -1
。
对于包含 file.find("xlsx") != -1
的任何文件名,条件 True
将为 xlsx
,因此文件名将被添加到列表中。
因此,此代码:
[file for file in os.listdir(folder_dir) if file.find("xlsx") != -1]
只是列出 folder_dir
中包含 xlsx
的所有文件。
更一般地,您可能想检查文件名是否以结尾 .xlsx
代替,使用 str.endswith
:
[file for file in os.listdir(folder_dir) if file.endswith(".xlsx")]