我知道在此站点上曾多次问过类似的问题,但是那里提供的解决方案对我不起作用。
我需要重命名带有标题的文件,例如
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。
答案 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")