|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大佬,小弟有一个问题想要请教:
在学Python第35课课后题中有一个问题是关于计算代码行数的。
如果是txt 文件,那么很容易,可以直接使用for each_line in f: line +=1 这样的方式就能得到这个txt文件的总行数。
然而,对于py文件,如果使用同样的方法则会报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa1 in position 12: illegal multibyte sequence
然而我看了答案之后发现小甲鱼的代码中并没有用什么特殊的方法去算一个py文件的行数。
以下是小甲鱼的代码(部分)
def calc_code(file_name): #这里的file_name是一个特殊扩展名的文件,比如.py
lines = 0
with open(file_name) as f:
print('正在分析文件:%s ...' % file_name)
try:
for each_line in f:
lines += 1
except UnicodeDecodeError:
pass # 不可避免会遇到格式不兼容的文件,这里忽略掉......
return lines
小甲鱼的代码是可以正确运行的。
但是我尝试了几遍只是写一段找py文件行数的代码,却直接会报错。
比如:
>>> lines = 0
>>> with open('动动手1 账号中心 答案.py') as f:
print('正在分析')
for each_line in f:
lines +=1
正在分析
Traceback (most recent call last):
File "<pyshell#46>", line 3, in <module>
for each_line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa1 in position 12: illegal multibyte sequence
难道是有些py文件可以读取,有些则会报错(UnicodeDecodeError)?
同样都是py文件,这是为什么呢?
非常感谢!!
文件编码问题
因为大多数编辑器默认的保存编码是utf8,所以初级的解决办法是直接指定以utf8编码打开文件:
- lines = 0
- with open('动动手1 账号中心 答案.py', 'r', encoding='utf-8') as f:
- print('正在分析')
- for each_line in f:
- lines +=1
复制代码
|
|