零基础入门学习python第30讲课后作业
零基础入门学习python课后作业第30讲第3题,我运行之后出现这个代码,请大神帮忙看看怎么解决代码如下:
import os
def serch(star_file,target):
os.chdir(star_file)
for each_file in os.listdir(os.curdir):
ext = os.path.splitext(each_file)
if ext in target:
file_address.append(os.getcwd() + os.sep + each_file + os.linesep)
if os.path.isdir(each_file):
serch(each_file,target)
os.chdir(os.pardir)
star_file = input("请输入待查找的初始目录:")
target = ['.mp4','.rmvb','.avi']
file_address = []
serch(star_file,target)
f = open('e:\\fishC\\课后作业\\p30\\vedioLise.txt','w')
f.writelines(file_address)
f.close()
运行提示:
请输入待查找的初始目录:e:\\fishC
Traceback (most recent call last):
File "E:\fishC\课后作业\p30\3.py", line 19, in <module>
f.writelines(file_address)
UnicodeEncodeError: 'gbk' codec can't encode character '\uc544' in position 18: illegal multibyte sequence 您好!根据您提供的代码和错误提示,问题出在向文件写入时遇到了非GBK编码的字符。为了解决这个问题,您可以在打开文件时指定编码为`utf-8`。请将以下代码中的`f = open('e:\\fishC\\课后作业\\p30\\vedioLise.txt','w')`这一行替换为:
f = open('e:\\fishC\\课后作业\\p30\\vedioLise.txt', 'w', encoding='utf-8')
修改后的完整代码如下:
import os
def serch(star_file, target):
os.chdir(star_file)
for each_file in os.listdir(os.curdir):
ext = os.path.splitext(each_file)
if ext in target:
file_address.append(os.getcwd() + os.sep + each_file + os.linesep)
if os.path.isdir(each_file):
serch(each_file, target)
os.chdir(os.pardir)
star_file = input("请输入待查找的初始目录:")
target = ['.mp4', '.rmvb', '.avi']
file_address = []
serch(star_file, target)
f = open('e:\\fishC\\课后作业\\p30\\vedioLise.txt', 'w', encoding='utf-8')
f.writelines(file_address)
f.close()
使用上面的修改后的代码,您应该能够正确地在文件中写入包含非GBK编码字符的文本。 isdkz 发表于 2023-4-21 14:12
您好!根据您提供的代码和错误提示,问题出在向文件写入时遇到了非GBK编码的字符。为了解决这个问题,您可 ...
那请问老师后面如果遇到同样的错误代码,使用以上的方法都能解决问题吗? capp211 发表于 2023-4-21 14:18
那请问老师后面如果遇到同样的错误代码,使用以上的方法都能解决问题吗?
可以解决,不过还是建议你去理解一下编码,你下次遇到这种问题可能不是使用 utf-8 编码,
python中也可以用 chardet 或 cchardet 来检测编码
`chardet`是一个第三方库,用于检测给定数据的编码。首先,您需要安装`chardet`库。在命令行中运行以下命令进行安装:
pip install chardet
安装完成后,您可以使用以下代码示例检测文件编码:
import chardet
def detect_file_encoding(file_path):
with open(file_path, 'rb') as f:
result = chardet.detect(f.read())
return result['encoding']
file_path = 'path/to/your/file.txt'
encoding = detect_file_encoding(file_path)
print(f'The encoding of {file_path} is: {encoding}')
这里的`detect_file_encoding`函数接收一个文件路径作为参数,读取文件的二进制内容,然后使用`chardet.detect()`方法检测编码。最后,该函数返回检测到的编码。
请注意,`chardet`库可能在某些情况下无法准确检测编码。此外,检测大型文件的编码可能需要较长时间。在这种情况下,您可以只读取文件的一部分内容来检测编码,例如:
with open(file_path, 'rb') as f:
result = chardet.detect(f.read(1024))
页:
[1]