shadownet
V2EX  ›  问与答

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

  •  
  •   shadownet · Dec 7, 2017 · 9177 views
    This topic created in 3263 days ago, the information mentioned may be changed or developed.

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

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

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

    你如果用 os 库操作它?
    roricon
    roricon
    Dec 7, 2017
    6
    https://stackoverflow.com/a/14852407

    os 库支持打开带空格的路径啊...
    Osk
    Osk
    Dec 7, 2017 via Android
    7
    os.path.basename()
    os.path.dirname()

    ???

    我没明白为何要手动去转义,又不是 shell 脚本,最多用下 raw string 啊
    shadownet
    shadownet
    OP
    Dec 7, 2017
    8
    @roricon os 是没问题,但是我还需要 open 的
    shadownet
    shadownet
    OP
    Dec 7, 2017
    9
    @Osk 需要 open, rename
    roricon
    roricon
    Dec 7, 2017❤️1
    10
    >>> 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
    Osk
    Dec 7, 2017 via Android
    11
    @roricon 同没明白,open()和 os.rename()处理空格都没问题。难道楼主用了 os.system("rename ")
    guocdfeifei
    guocdfeifei
    Aug 12, 2019
    12
    尝试下用这个方法,我用了下可以哦
    opfile = os.path.normpath(opfile)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4460 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 06:58 · PVG 14:58 · LAX 22:58 · JFK 01:58
    ♥ Do have faith in what you're doing.