【问题标题】:Remove certain strings from filenames inside a folder从文件夹内的文件名中删除某些字符串
【发布时间】:2020-09-20 22:30:57
【问题描述】:

我有一个包含一堆文本文件的文件夹。

32167.pdf.txt
20988.pdf.txt
45678.pdf.txt
:
:
99999.pdf.txt

我想从该文件夹内的所有文件名中删除“.pdf”(如下所示)。

32167.txt
20988.txt
45678.txt
:
:
99999.txt

我尝试使用 os 来做,但给我一个错误FileNotFoundError: [Errno 2] No such file or directory: '.txt' -> '.txt'

这是我的代码:

for filename in os.listdir('/Users/CodingStark/folder/'):
    os.rename(filename, filename.replace('.pdf', ''))

我想知道有没有其他方法可以实现这一点而不是使用操作系统?或者 os 是最快的方法吗?谢谢!!

【问题讨论】:

  • @Steve 但是这段代码给了我一个错误:FileNotFoundError: [Errno 2] No such file or directory: '.txt' -> '.txt'
  • 了解错误所指的代码行会很有帮助。
  • 哦...它不工作。对不起。我看错了问题
  • @RoccoFortuna 它指的是这一行os.rename(filename, filename.replace('.pdf', ''))
  • @Steve 没关系!!

标签: python filenames


【解决方案1】:

我想我知道出了什么问题。 filename 将只包含文件名,而不是完整路径。试试这个:

dir = '/Users/CodingStark/folder/'
for filename in os.listdir(dir):
    os.rename(dir + filename, dir + filename.replace('.pdf', ''))

【讨论】:

  • 如果已经使用os.path,最好使用os.path.join而不是使用字符串连接(+
  • 技术上,当然。但是,如果您知道您的代码永远不会出现在 Windows 机器上,那么它实际上并没有任何区别。 Windows 现在甚至不会采用混合正向和反向斜线的路径吗? - 如果这是进入长期服务器项目的代码,我可能会根据您的建议进行更改。但是如果我只是想一次性重命名一个目录下的一堆文件,那代码反正已经没用了,何必呢。
【解决方案2】:

在使用路径时,您真的应该使用pathlib。它为大多数os 功能提供了替代品,而且使用起来更有意义,而且绝对更便携。

到手头的任务:

from pathlib import Path

root = Path('/Users/CodingStark/folder/')
for path in root.glob("*.pdf.txt"):
    path.rename(path.with_name(path.name.replace(".pdf", "")))
#               or:
#               path.with_suffix('').with_suffix(".txt")
#               or:
#               str(path).replace(".pdf", "")

【讨论】:

  • 我尝试运行代码,但执行代码后文件名仍然没有做任何更改。
  • 嗨@CodingStark,你是对的。对于那个很抱歉。我错过了with_suffix 仅在多个后缀的情况下更改最后一个后缀的事实。上面用替代方法修复了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多