V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shadownet
V2EX  ›  问与答

Python 如何处理文件名里有空格?

  •  
  •   shadownet · 2017-12-07 11:02:50 +08:00 · 8201 次点击
    这是一个创建于 2576 天前的主题,其中的信息可能已经有所发展或是发生改变。

    #请不要看题目就说加双引号

    需求是使用 Python 批量改一些文件名, 所以文件名会在变量里,请问有人结果过类似问题吗,如何解决的?

    12 条回复    2019-08-12 17:30:54 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2017-12-07 11:27:42 +08:00 via iPhone
    我记得 os.walk 能直接把 filename 给分割出来
    shadownet
        2
    shadownet  
    OP
       2017-12-07 11:30:52 +08:00
    @wwqgtxx 是可以,不过还是需要自己转义并加上双引号,我正在试 2 种一起
    roricon
        3
    roricon  
       2017-12-07 11:31:12 +08:00
    其实没看懂你想问啥, 字符串变量里也没说不让有空格啊. 你能举个例子么?
    Aliencn
        4
    Aliencn  
       2017-12-07 11:32:09 +08:00   ❤️ 2
    加双引号
    shadownet
        5
    shadownet  
    OP
       2017-12-07 11:40:48 +08:00
    @roricon 遍历到的文件路径 /aaa/bbb ccc/ddd eee.txt

    你如果用 os 库操作它?
    roricon
        6
    roricon  
       2017-12-07 11:45:23 +08:00
    https://stackoverflow.com/a/14852407

    os 库支持打开带空格的路径啊...
    Osk
        7
    Osk  
       2017-12-07 11:46:19 +08:00 via Android
    os.path.basename()
    os.path.dirname()

    ???

    我没明白为何要手动去转义,又不是 shell 脚本,最多用下 raw string 啊
    shadownet
        8
    shadownet  
    OP
       2017-12-07 11:49:14 +08:00
    @roricon os 是没问题,但是我还需要 open 的
    shadownet
        9
    shadownet  
    OP
       2017-12-07 11:49:42 +08:00
    @Osk 需要 open, rename
    roricon
        10
    roricon  
       2017-12-07 12:04:23 +08:00   ❤️ 1
    >>> import os
    >>> folder = "abc bcd"
    >>> f = open(os.path.join('/tmp', folder, 'test.txt'))
    >>> f.readline()
    ''
    >>> os.rename(os.path.join('/tmp', folder, 'test.txt'), '/tmp/abc bcd/ok.txt')

    $ ls /tmp/abc\ bcd
    ok.txt

    还是没明白你遇到什么问题了
    Osk
        11
    Osk  
       2017-12-07 12:56:27 +08:00 via Android
    @roricon 同没明白,open()和 os.rename()处理空格都没问题。难道楼主用了 os.system("rename ")
    guocdfeifei
        12
    guocdfeifei  
       2019-08-12 17:30:54 +08:00
    尝试下用这个方法,我用了下可以哦
    opfile = os.path.normpath(opfile)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3548 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.