我想到的是迭代文件夹以检查文件名是否包含任何西里尔字符,如果有,则将这些文件重命名为其他文件。
我怎么能这样做?
答案 0 :(得分:3)
Python 2:
# -*- coding: utf-8 -*-
def check_value(value):
try:
value.decode('ascii')
except UnicodeDecodeError:
return False
else:
return True
Python 3:
Python 3' str'对象没有属性' decode'。因此,您可以按如下方式使用编码。
# -*- coding: utf-8 -*-
def check_value(value):
try:
value.encode('ascii')
except UnicodeEncodeError:
return False
else:
return True
然后您可以收集文件名,并通过check_value函数传递它们。
答案 1 :(得分:3)
Python 3
这个检查传递的字符串的每个字符,无论它是否在Cyrillic块中,如果字符串中包含西里尔字符,则返回True
。 Python3中的字符串默认为unicode。该函数将每个字符编码为 utf-8 ,并检查这是否产生与包含西里尔字符的表块匹配的两个字节。
def isCyrillic(filename):
for char in filename:
char_utf8 = char.encode('utf-8') # encode to utf-8
if len(char_utf8) == 2 \ # check if we have 2 bytes and if the
and 0xd0 <= char_utf8[0] <= 0xd3\ # first and second byte point to
and 0x80 <= char_utf8[1] <= 0xbf: # Cyrillic block (unicode U+0400-U+04FF)
return True
return False
使用评论
中建议的ord()
功能相同
def isCyrillicOrd(filename):
for char in filename:
if 0x0400 <= ord(char) <= 0x04FF: # directly checking unicode code point
return True
return False
测试目录
cycont
|---- asciifile.txt
|---- кириллфайл.txt
|---- украї́нська.txt
|---- संस्कृत.txt
<强>测试强>
import os
for (dirpath, dirnames, filenames) in os.walk('G:/cycont'):
for filename in filenames:
print(filename, isCyrillic(filename), isCyrillicOrd(filename))
<强>输出强>
asciifile.txt False False
кириллфайл.txt True True
украї́нська.txt True True
संस्कृत.txt False False
答案 2 :(得分:1)
有一个为此编写的库:Python的transliterate lib。
所以,首先你需要获取你的文件名。为此,请使用os.listdir():
from os import listdir
from os.path import isfile, join
files = [ f for f in listdir(dir) if isfile(join(dir,f)) ]
现在,您可以查看文件中的每个文件,根据需要替换任何字符:
import transliterate
newName = translit(filename, 'ru', reversed=True)
然后只需使用os.rename重命名文件:
os.rename(filename, newName)