2

我有一个文件夹,里面有不同的子文件夹。我必须遍历所有文件并检查 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)
4

2 回答 2

5

使用原始字符串或双黑斜线\\

没有\\或原始字符串'\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\Desktop\test\images/ds_dataobject.gif.bak'

查看您尝试混合\/在单个路径中的错误,更好地使用os.path.join

path = os.path.join(subdir, file)
于 2013-11-04T11:55:06.160 回答
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)
于 2013-11-04T11:58:53.627 回答