Python搜索文件结束

时间:2015-05-18 19:18:15

标签: python python-3.x

我写了一个python脚本来搜索当前文件夹中的所有.avi文件,并将它们的名字写在一个文件中以供以后处理。

但是我只得到一个空文件,即使我的文件夹中有.avi

这是我的代码:

import sh

f = open("film.txt", "w")

ending = [".avi", ".mp4"]
lsa = sh.ls("-a")
for i in lsa:
    if i in "*.avi":
        print(i, file=f)

f.close()

6 个答案:

答案 0 :(得分:3)

in不进行此类模式匹配。假设i是一个字符串,只需使用

i.endswith('.avi')

但是为了上帝的缘故,不要调用字符串变量i

或者一次检查多个结局(感谢@msvalkon提醒):

i.endswith((".avi", ".mp4"))

你可以使用Python的glob模块,它具有这样的模式功能:

import glob
with open("film.txt", "w") as f:
    for filename in glob.glob("*.avi"):
        print(filename, file=f)

答案 1 :(得分:1)

文件写入应该像这样:

f.write(i)

但您可能也遇到if i in "*.avi":

的问题

所以你的代码将是

import sh

f = open("film.txt", "w")

ending = [".avi", ".mp4"]
lsa = sh.ls("-a")
for i in lsa:
    for end in ending:
        if i.endswith(end): 
            print("found one {}".format(i))
            f.write(i)
f.close()

现在很好的版本:

import glob, itertools
patterns = ["*.avi","*.mp4"]
with open("film.txt", "w") as ofile:
    for fl in itertools.chain.from_iterable(glob.glob(pattern) for pattern in patterns):
        ofile.write(fl + "\n")

答案 2 :(得分:1)

您可以简单地使用内置的glob模块,它完全符合您的要求:

import glob

with open("film.txt", "w") as f:
    f.write("\n".join(glob.glob("*.avi") + glob.glob("*.mp4")))

glob.glob搜索与特定模式匹配的文件。如果您使用我写的内容,它将搜索当前目录中具有.avi.mp4文件扩展名的文件

请注意使用上下文管理器(with open(...))而不是f = open(...)f.close()。这更像是pythonic。

此外,我使用\n加入来跳过for循环。

答案 3 :(得分:1)

if i in "*.avi"正在做的是问“i'*.avi'的子串?”这不是一个全局匹配操作。

最简单的解决方案可能是使用glob而不是sh

for i in glob.glob('*.avi') + glob.glob('*.mp4'):
    …

答案 4 :(得分:0)

使用"打开文件"

with open("film.txt", "w") as f:
    for root, _, files in os.walk(os.getcwd()):
        for file in files:
            if file.endswith((".avi", ".mp4")):
                f.write(file)

答案 5 :(得分:0)

稍微修改了李雨的答案。

1st)定义一个函数:

def search_ending(path, extension):
    for root, dir, filenames in os.walk(path):
        for filename in filenames:
            if os.path.splitext(filename)[-1] == extension:
                yield os.path.join(root, filename)

2nd)调用该函数并将结果放在列表中:

ext_list = list(search_pos(os.getcwd(), '.jpg'))

3rd),您可以显示它

for line in ext_list:
        print('\n'+ line)