【问题标题】:FileNotFoundError - if i do not os.chdir to DIRECTORY [duplicate]FileNotFoundError - 如果我不 os.chdir 到 DIRECTORY [重复]
【发布时间】:2017-08-25 10:34:25
【问题描述】:

我正在编写以下代码来删除出现在文件名开头的数字和特殊字符。我有一个工作版本的代码,但是我尝试了一些东西,但我发现了一些让我感到困惑的东西。

下面是可以正常工作的代码。

import re
import os

DIR = 'C:\Rohit\Study\Python\Python_Programs\Basics\OOP'
os.chdir(DIR)

for file in os.listdir(DIR):
    if os.path.isfile(os.path.join(DIR, file)):
        fname, ext = os.path.splitext(file)
        fname = re.sub(r'(^[0-9. _-]*)(?=[A-Za-z])', "", fname)
        new_name = fname + ext
        os.rename(file, new_name)

但是,如果我只是从上面的代码中删除 os.chdir(DIR) 行,我就会开始收到以下错误。

FileNotFoundError: [WinError 2] The system cannot find the file specified: '6738903-.   --__..76 test.py'

以下是引发错误的代码。

DIR_PATH = r'C:\Rohit\Study\Python\Python_Programs\Basics\OOP'

for file in os.listdir(DIR):
    if os.path.isfile(os.path.join(DIR, file)):
        fname, ext = os.path.splitext(file)
        fname = re.sub(r'(^[0-9. _-]*)(?=[A-Za-z])', "", fname)
        new_name = fname + ext
        os.rename(file, new_name)

错误在os.rename() 行生成。 那么谁能建议我在这里做错了什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    如果file 不是相对于当前目录的有效路径(如果您不执行chdir 则不是这种情况),您应该向rename 提供完整路径。否则,您希望该函数如何找到要重命名的文件?你在isfile 中使用os.path.join 做得很好,为什么不用重命名呢?

    DIR_PATH = r'C:\Rohit\Study\Python\Python_Programs\Basics\OOP'
    
    for file in os.listdir(DIR):
        full_path = os.path.join(DIR, file)
        if os.path.isfile(full_path):
            fname, ext = os.path.splitext(file)
            fname = re.sub(r'(^[0-9. _-]*)(?=[A-Za-z])', "", fname)
            new_name = fname + ext
            os.rename(full_path, os.path.join(DIR, new_name))
    

    【讨论】:

    • 非常感谢,我的错误是我根本没有看它,显然 os.rename(file, new_name) 会在当前路径中找到文件。对不起,我的错。
    • @Rohit 也不是 Anis 使用原始前缀作为路径,因此他不需要将反斜杠后的所有字母大写来解决“奇怪的问题”:)
    • 还要注意 chdir 是不好的做法:如果另一个模块需要另一个当前目录怎么办?那将是一场chdir之战。不惜一切代价避免。
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多