【问题标题】:Renaming files in same directory with Python使用 Python 重命名同一目录中的文件
【发布时间】:2022-01-12 20:51:16
【问题描述】:

我有以下代码根据包含 8 个元素的列表重命名 txt 文件。如果我先将它们移动到不同的目录,我可以成功地重命名这些文件。

但是,当我想将文件移动到同一目录并通过将 withGapsFolder 换成 spamFolder 来重命名时,我没有得到预期的结果。相反,我得到了 4 个名为:spam001.txt、spam002.txt、spam003.txt 和 spam009.txt 的文件。

FileList中的元素有: ['spam001.txt', 'spam002.txt', 'spam003.txt', 'spam005.txt', 'spam006.txt', 'spam007.txt'、'spam008.txt'、'spam009.txt']

目录下的文本文件为: ['spam001.txt', 'spam002.txt', 'spam003.txt', 'spam004.txt', 'spam005.txt '、'spam006.txt'、'spam007.txt'、'spam008.txt']

for folderName, subfolders, filenames in os.walk(spamFolder):
for filename in filenames:

    if Counter1 == 8:
        sys.exit()
        
    #print(filename)
    #print(FileList[Counter1])
    shutil.move(os.path.join(spamFolder, filename), os.path.join(withGapsFolder, FileList[Counter1]))

    Counter1 = Counter1 + 1

    print(Counter1)

我想要的是通过循环遍历列表元素来重命名同一文件夹中的 txt 文件。

谢谢

-PS 这是使用 Python 自动化无聊的东西的练习,任务是在目录中的文件中按编号顺序创建一个间隙

更新:14/01/2022

for folderName, subfolders, filenames in os.walk(spamFolder):
    for filename in filenames:
 
        if Counter1 == 8:
            sys.exit()

        print(filename+FileList[Counter1])
              
        if filename == FileList[Counter1]:
            Counter1 = Counter1 + 1
        else:
            #print(filename)
            #print(FileList[Counter1])
            shutil.move(os.path.join(spamFolder, filename), os.path.join(spamFolder, FileList[Counter1]))
            Counter1 = Counter1 + 1
            print('X')

print(Counter1)

【问题讨论】:

  • 嗨@Ouroborus,请参阅上面我的更新 14/01/2022。我做了类似于你所说的事情,如果文件与列表中的文件名称相同,则跳过重命名文件,如果名称不同,则重命名文件。我知道它正在跳过文件名相同和不同的地方,即通过打印 X。但我仍然得到文件:spam001.txt、spam002.txt、spam003.txt 和 spam009.txt 留在文件夹中? ?例如,当 spam004.txt != spam005.txt 它打印 X。但我的文件夹目录中没有 spam005.txt

标签: python-3.x list shutil


【解决方案1】:

我最终找到了一种解决方法,尽管它可能很笨重。由于将每个文件重命名为先前文件使用的名称可能会导致问题。我决定在文件前面附加一个“x”,这些文件与已存在的文件同名,如下所示:

shutil.move(os.path.join(spamFolder, filename), os.path.join(spamFolder, 'x'+FileList[Counter1]))

然后我简单地使用 os.walk 功能来去除'x'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2016-09-24
    • 2014-12-30
    • 2016-07-09
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多