我有一个包含不同子文件夹的文件夹。我必须遍历所有文件并检查John和Jose的出现情况,并分别替换为Mikel和Mourinho。
这是我用Python编写的脚本。它工作正常,但是当我遇到.gif
文件时,它给了我一个错误,并没有进一步迭代。
你能告诉我为什么吗?
错误是
Traceback (most recent call last):
File "C:\Users\sid\Desktop\script.py", line 33, in <module>
os.chmod(path ,stat.S_IWRITE)
FileNotFoundError: [WinError 2] The system cannot find the file specified:'C:\Users\sid\Desktop\test\\images/ds_dataobject.gif.bak'
我的代码:
import os,stat
import fileinput
import sys
rootdir ='C:\Users\spemmara\Desktop\test'
searchTerms={"John":"Mikel", "Jose":"Mourinho"}
def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
if searchExp in line:
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
for subdir, dirs, files in os.walk(rootdir):
for file in files:
path=subdir+'/'+file
print(path)
os.chmod(path ,stat.S_IWRITE)
for key,value in searchTerms.items():
replaceAll(path,key,value)
os.chmod(path,stat.S_IREAD)
答案 0 :(得分:4)
使用原始字符串或Double blackslashes \\
:
将\\
或原始字符串'\t'
转换为制表符空间:
>>> print 'C:\Users\spemmara\Desktop\test'
C:\Users\spemmara\Desktop est
使用原始字符串:
>>> print r'C:\Users\spemmara\Desktop\test'
C:\Users\spemmara\Desktop\test
双重黑色:
>>> print 'C:\\Users\\spemmara\\Desktop\\test'
C:\Users\spemmara\Desktop\test
<强>更新强>
'C:\ Users \用户SID \桌面\测试\图像/ ds_dataobject.gif.bak'
查看您尝试在单个路径中混合\
和/
的错误,最好使用os.path.join
:
path = os.path.join(subdir, file)
答案 1 :(得分:0)
除了hcwhsa的答案之外,你还可以通过使用双反斜杠来解决它:
rootdir = 'C:\\Users\\spemmara\\Desktop\\test'
我昨天失去了我的水晶球,但我想另一件让你有问题的事情,是因为当你的程序找到一个gif
文件时,你正试图给它写文字。
如果您不想这样做,只需使用以下条件进行测试:
for subdir, dirs, files in os.walk(rootdir):
for file in files:
path=subdir+'/'+file
print(path)
os.chmod(path ,stat.S_IWRITE)
if '.gif' not in path:
for key,value in searchTerms.items():
replaceAll(path,key,value)
os.chmod(path,stat.S_IREAD)