哪几个小说网站做网编拿的钱多头条新闻今日头条官方版本
elif args.dirname.endswith((‘.m’,’.xml’))无法工作,如果args是一个必须的字符串,或者你的代码会出错,那么它就不可能有两个不同的扩展名,你会如果用户想要同时选择两者,则需要获得扩展元组,例如:
def main(argv):
# make argumentParser return a tuple
args = argumentParser(argv)
if sorted(args) == ('.m', '.xml'):
overrideM()
xmlOverride()
一个更好的选择是使用一个泛型函数,它接受一个文件扩展名,只是迭代传入扩展名的args:
def main(argv):
args = argumentParser(argv)
for ext in args:
generic_search(ext)
如果你试图匹配两者,你就无法在字符串上使用args.dirname.endswith((‘.m’,’.xml’)),字符串根本不能以.m和.xml结尾.我还将路径作为一个arg和扩展来搜索单独的args,然后你可以单独地为每个arbase,或者使用带有多个扩展的str.endswith,使用os.listdir列出文件.
基本的想法是这样的:
from argparse import ArgumentParser
import os
parser = ArgumentParser()
parser.add_argument("path")
parser.add_argument('ext', nargs='*')
args = parser.parse_args()
path = args.path
exts = args.ext
# what your glob is doing
for f in os.listdir(path):
if f.endswith(tuple(exts)):
with open(os.path.join(path, f)) as fle:
print(fle.name)
# do whatever
如果您允许用户搜索多个文件,那么除非您在每个函数中执行非常具体的操作,否则最好使用endswith并对目录进行一次传递.
如果您还想搜索所有子目录以及路径,也可以将它与glob结合使用:
from argparse import ArgumentParser
import os
from glob import iglob
parser = ArgumentParser()
parser.add_argument("path")
parser.add_argument('ext', nargs='*')
args = parser.parse_args()
path = args.path
exts = args.ext
for f in chain.from_iterable([iglob(path+"/*"), iglob(path+"/**/*")]):
if f.endswith(tuple(exts)):
with open(os.path.join(path, f)) as fle:
print(fle.name)
再次,它将适用于多个文件扩展名,一次通过目录. glob适用于单个匹配或者可能是一对,但如果你有多个扩展,那么使用带有endswith的listdir和filer会更有意义.
如果你真的想为每个扩展使用不同的逻辑,你可以拉伸扩展并使用dict调用相应的函数映射扩展名到函数:
from argparse import ArgumentParser
import os
from glob import iglob
def xml(f):
print(f)
def m(f):
print(f)
def text(f):
print(f)
mapped = {"m":m, "xml":xml, "text":text}
parser = ArgumentParser()
parser.add_argument("path")
parser.add_argument('ext', nargs='*')
args = parser.parse_args()
path = args.path
exts = args.ext
for f in chain.from_iterable([iglob(path + "/*"), iglob(path + "/**/*")]):
ext = f.rsplit(".", 1)
if len(ext) == 2 and ext[1] in mapped:
mapped[ext[1]](f)
dict查找是O(1),因此除了简洁之外,它也非常有效.
样本输出:
$python 3_payg.py /home/padraic .xml
/home/padraic/sitemap.xml
/home/padraic/yacy/build.xml
/home/padraic/graphviz-master/graphviz.appdata.xml