使用Python重命名标题中带引号的文件

时间:2019-03-15 15:41:16

标签: python string filenames

我知道在此站点上曾多次问过类似的问题,但是那里提供的解决方案对我不起作用。

我需要重命名带有标题的文件,例如

a.jpg
'b.jpg'
c.jpg
"d.jpg"

a.jpg
b.jpg
c.jpg
d.jpg

其中一些标题在标题中也带有引号,但是它们是否被删除并不重要。

我尝试过

import os
import re

fnames = os.listdir('.')
for fname in fnames:
   os.rename(fname, re.sub("\'", '', fname))

import os
for file in os.listdir("."):
  os.rename(file, file.replace("\'", "")) 

然后也对引号做同样的操作,但是标题保持不变。我认为这可能是由于listdir返回了带有引号的文件名,但是我不确定。

编辑:我正在使用Ubuntu 18.04。

2 个答案:

答案 0 :(得分:1)

这是我尝试使用for循环的方法,就像您一样,并在字符串上使用列表理解,这也是可迭代的。

import os

files = os.listdir(os.getcwd())
for file in files:
    new_name = ''.join([char for char in file if not char == '\''])
    print(new_name)
    os.rename(file, new_name)

使用将来在文件名中不需要的字符来编辑禁止的字符列表。 请记住,这还将更改文件夹名称afaik,因此您可能要检查for循环的开始     如果os.isfile(file): 更改名称之前。 我实际上不明白您将如何拥有文件名,文件名包括引号内的扩展名,但是无论哪种方式都可以工作。强烈建议您删除点时要小心。 我还建议您先阅读os模块的文档,然后再使用其功能,因为它们可以完成您可能不知道的事情。例如:重命名目录中的现有文件名将仅以静默方式替换该文件。

答案 1 :(得分:1)

在Windows上,其中带有双引号的文件名不是有效的文件名。但是,带单引号的文件名有效。

在python中带有双引号的字符串如下所示:

'"I\'m a string with a double quote on each side"'

在python中带有单引号的字符串如下所示:

"'I\'m a string with a single quote on each side'"

由于Windows上没有双引号文件名,因此无法os.rename('"example.txt"', "example.txt")。因为它甚至不存在,甚至不能被重命名。

您可以将此脚本放在桌面上,并观察文件名在执行时的变化:

import os

open("'ex'am'ple.t'xt'",'w')
input("Press enter to rename.")
#example with single quotes all over the filename
os.rename("'ex'am'ple.t'xt'", "example.txt")

open("'example.txt'",'w')
input("Press enter to rename.")
#example with single quotes on each side of filename
os.rename("'example2.txt'", "example2.txt")