Python-用下划线替换所有空格,并为目录中的所有文件转换为小写

时间:2017-05-02 00:02:29

标签: python

我正在努力做标题解释,但我得到了消息  WinError2:找不到指定的文件' New Text Document.txt' - > ' new_text_document.txt'使用下面的代码段。是的,我的桌面位于驱动器号D上,这假设目标目录名为' directory'。我在名为' New Text Document.txt'的目录中有一个示例文件。我无法弄清楚问题出在哪里。

import os
path = 'D:\Desktop\directory'
filenames = os.listdir(path)
for filename in filenames:
    os.rename(filename, filename.replace(' ', '_').lower())

4 个答案:

答案 0 :(得分:1)

使用完整的文件命名来进行更安全的操作系统操作:

import os
path = 'D:\\test'
filenames = os.listdir(path)
for filename in filenames:
    #print(filename)
    os.rename(path+'\\'+ filename,path+'\\'+ filename.replace(' ', '_').lower()) 

答案 1 :(得分:0)

因为您没有为os.rename函数指定New Text Document.txt所在的目录。你可以在for循环之前添加这一行。

os.chdir(path)

使用原始字符串或完整文件路径,因为您定义路径的方式也会给您一个错误。

path = r'D:\Desktop\directory'或path = 'D:\\Desktop\\directory'

答案 2 :(得分:0)

使用列表理解的单行:

import os

directory = 'D:\Desktop\directory'

[os.rename(os.path.join(directory, f), os.path.join(directory, f).replace(' ', '_').lower()) for f in os.listdir(directory)]

列表理解借鉴了答案Batch Renaming of Files in a Directory

答案 3 :(得分:0)

如果要通过多个级别的文件夹递归执行此操作,请使用os.walk(directory)的替代方法:

import os

directory = r'D:\Desktop\directory'

# Use underscore? Otherwise defaults to hyphen
is_use_underscore = True
char_to_use = '_' if is_use_underscore else '-'   

print("Renaming files now!")
for root, dirs, files in os.walk(directory):
    print(f"root: {root}")
    print(f"dirs: {dirs}")
    print(f"files: {files}")

    for current_filename in files:
        new_filename = current_filename.replace(' ', char_to_use)

        print(f"current filename: {current_filename}")
        print(f"    new filename: {new_filename}")

        os.rename(
            os.path.join(root, current_filename), 
            os.path.join(root, new_filename)
        )   

print("All done!")