【发布时间】:2018-01-21 08:38:10
【问题描述】:
在这里,我正在尝试创建一个代码,该代码将根据掩码删除文件夹中的文件。应删除所有包含 17 的文件 文件名格式为 ??_????17*.*,在哪里? - 任何符号 1..n、A..z、_ 和 17 - 在任何文件中(其他文件也包含 18),其扩展名无关紧要。文件 AB_DEFG17Something.Anything - Copy (2).txt
的某些示例import os
import re
dir_name = "/Python/Test_folder" # open the folder and read files
testfolder = os.listdir(dir_name)
def matching(r, s): # condition if there's nothing to match
match = re.search(r, s)
if match:
return match.group()
return "Files don't exist!"
matching(r'^\w\w\[_]\w\w\w\w\[1]\[7]\w+\[.]\w+', testfolder) # matching the file's mask
for item in testfolder.index(matching):
if item.name(matching, s):
os.remove(os.path.join(dir_name, item))
# format of filenames not converted : ??_????17*.*
# convert for python separarately : [\w][\w][_\w][\w][\w][\w]\[1]\[7][\w]+[\.][\w]+
# ? - Any symbol 1..n,A..z \w repeating is *
# * - Any number of symbols 1..n, A..z
# _ and 17 - in any files `
也有一些错误。
文件“D:\Python\Test_folder\Remover v2.py”,第 14 行,在 matching(r'\w\w[_]\w\w\w\w[1][7]\w+[.]\w+', testfolder) # 匹配文件的掩码  文件“D:\Python\Test_folder\Remover v2.py”,第 9 行,匹配中 匹配 = re.search(r, s) 搜索中的文件“c:\Program Files (x86)\Wing IDE Personal 6.0\bin\runtime-python2.7\Lib\re.py”,第 146 行 return _compile(pattern, flags).search(string)
我是一个初学者,想以业余方式获得 PY 方面的经验,并行学习细节。我究竟做错了什么?任何帮助都会很有用。谢谢
【问题讨论】:
-
shell 已经支持通过通配符删除文件。无论如何,您的正则表达式似乎与问题陈述中的 glob 通配符并不特别密切相关。 Python 的
glob模块在这里可能是更好的选择。 -
对于 Python 问题,您必须确保缩进正确。让我们猜测哪些错误是代码中的实际错误,而不是由草率的复制/粘贴引起的问题,这是在浪费每个人的时间。尝试将代码粘贴为单个块,然后用鼠标选择该块,然后键入 ctrl-k 以缩进为代码。 (这似乎不适用于本网站的移动版本。)另请参阅help。
-
1、7和_只是匹配自己,没有理由将它们放在字符类中。[之前的反斜杠在您的尝试中将其变成 not 字符类。 -
让
matching在不匹配的情况下返回一个字符串似乎是一个特别糟糕的选择。如果你真的认为这需要是一个单独的函数,让它返回一些在你的其他代码中易于处理的东西,比如None或False,并且只在直接与 uer 通信时使用人性化的表示。