V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ouankou
V2EX  ›  Python

请教Python问题:'OSError: [Errno 2] No such file or directory'

  •  
  •   ouankou ·
    ouankou · 2012-08-16 14:30:54 +08:00 · 18106 次点击
    这是一个创建于 4264 天前的主题,其中的信息可能已经有所发展或是发生改变。
    081911-783-carib-whole_hd1.wmv
    这种文件名想必很多人都很熟悉……这几天在写一个脚本,识别当前目录这类文件名,然后连上官网查找发行日期、演员名字和标题,然后改名为:日期+演员+标题.wmv。如果是两个片段,如hd1和hd2,就在尾部分别加上1和2序号。

    没有加入双片段识别功能之前,运行很正常,但是加入之后就只能识别改名一个文件,然后就出错退出,直接再次运行还是改完一个文件名后出错退出。调了好久不知道什么问题,请大家帮忙看看是怎么回事,指点一下,谢谢啦!

    我用的是OS X 10.8 + Python3。源码中filename是日期+演员+标题,date是日期。re.match('._')那里是我在出错后自己加的,因为看提示好像是先找到了一个'._'开头的文件,然后改名时这文件没了所以出错,但是没什么效果,运行后还是一样的提示。

    出错信息如下:
    081911-783-carib-whole_hd1.wmv
    081911-783
    ._081911-783-carib-whole_hd1.wmv
    081911-783
    Traceback (most recent call last):
    File "/Users/ouankou/Dropbox/Work/Current/caribrenamer.py", line 42, in <module>
    finalname()
    File "/Users/ouankou/Dropbox/Work/Current/caribrenamer.py", line 40, in finalname
    os.rename(file, filename)
    OSError: [Errno 2] No such file or directory

    改名部分源代码如下:
    def finalname():
    for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*' + '-carib' + '*'):
    if re.match('.-', file):
    break
    print (file)
    idend = re.compile('-carib')
    idpos = idend.search(file)
    movieid = file[(idpos.start()-10):idpos.start()]
    print (movieid)
    filename, date = getinfo(movieid)
    if re.search('hd2', file):
    for prefile in os.listdir('.'):
    if fnmatch.fnmatch(prefile, '*' + date + '*'):
    newname = prefile[0:(len(prefile)-4)] + ' 1.wmv'
    os.rename(prefile, newname)
    filename = filename + ' 2.wmv'
    else:
    filename = filename + '.wmv'
    7 条回复    1970-01-01 08:00:00 +08:00
    explon
        1
    explon  
       2012-08-16 15:01:58 +08:00
    好程序, 期待
    clino
        2
    clino  
       2012-08-16 15:46:09 +08:00   ❤️ 1
    你 catch 一下这个异常(可以不做处理只打印一下相关的错误信息),然后继续处理其他的文件
    ouankou
        3
    ouankou  
    OP
       2012-08-16 15:49:11 +08:00
    @explon 不知道问题原因,不过跳过这个问题了。

    if fnmatch.fnmatch(file, '[!._]*' + '-carib' + '*.wmv'):

    加入了新的文件名判定条件,'._'开头的文件不处理。
    把这个脚本传到GitHub了,方便的话可以下载试试……
    https://github.com/ouankou/Caribrenamer/blob/master/caribrenamer.py
    不过还有一点问题是有时双片段文件改名不正常,还不知道原因。即hd2改名加序号2后不会在hd1后面加上序号1。
    ouankou
        4
    ouankou  
    OP
       2012-08-16 15:52:22 +08:00
    @clino 多谢,我得先去google一下啥叫catch……

    修改了一下过滤文件名部分的源代码,现在基本可以工作了。
    https://github.com/ouankou/Caribrenamer/blob/master/caribrenamer.py
    有时间的话还请帮忙指点一二。
    explon
        5
    explon  
       2012-08-16 16:14:55 +08:00
    ouankou
        6
    ouankou  
    OP
       2012-08-16 16:20:30 +08:00
    @explon 不好意思啊……
    我在墙外,没什么问题,刚改了一堆文件。难道这网站被和谐了?要是可以的话挂上vpn或ssh再试试?
    explon
        7
    explon  
       2012-08-16 16:25:39 +08:00
    @ouankou 嗯, VPN 打开了, 很好很和谐
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5222 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:16 · PVG 15:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.