【发布时间】:2014-01-29 22:13:52
【问题描述】:
我收到了大量的 sas 文件,它们都需要更改其文件路径。
我为该任务编写的代码如下:
import glob
import os
import sys
os.chdir(r"C:\path\subdir")
glob.glob('*.sas')
import os
fileLIST=[]
for dirname, dirnames, filenames in os.walk('.'):
for filename in filenames:
fileLIST.append(os.path.join(dirname, filename))
print fileLIST
import re
for fileITEM in set(fileLIST):
dataFN=r"//path/subdir/{0}".format(fileITEM)
dataFH=open(dataFN, 'r+')
for row in dataFH:
print row
if re.findall('\.\.\.', str(row)) != []:
dataSTR=re.sub('\.\.\.', "//newpath/newsubdir", row)
print >> dataFH, dataSTR.encode('utf-8')
else:
print >> dataFH, row.encode('utf-8')
dataFH.close()
我有两个问题:首先,我的代码似乎无法识别三个连续的句点,即使用反斜杠分隔也是如此。其次,我收到一个错误“UnicodeDecodeError: 'ascii' codec can't decode byte...'
SAS 程序文件 (.sas) 是否可能不是 utf-8?如果是这样,修复是否像知道他们使用什么文件编码一样简单?
完整的回溯如下:
Traceback (most recent call last):
File "stringsubnew.py", line 26, in <module>
print >> dataFH, row.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 671: ordinal not in range(128)
提前致谢
【问题讨论】:
-
问题在于 ASCII 编解码器试图用非 ASCII 字节解码某些东西,所以不是 UTF-8 的文件不是你的问题。请包含完整的回溯,或至少包含哪一行生成异常。
-
SAS 程序文件可以是 UTF-8 或其他格式(最常见的是 wlatin1),具体取决于创建/保存它们的会话编码。
-
Wooble -- 刚刚将回溯添加到原始帖子。