鱼C论坛

 找回密码
 立即注册
查看: 2079|回复: 3

[已解决]零基础入门学习python第30讲课后作业

[复制链接]
发表于 2023-4-21 14:06:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
零基础入门学习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)[1]
        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
最佳答案
2023-4-21 14:12:59
您好!根据您提供的代码和错误提示,问题出在向文件写入时遇到了非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)[1]
        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编码字符的文本。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 14:12:59 | 显示全部楼层    本楼为最佳答案   
您好!根据您提供的代码和错误提示,问题出在向文件写入时遇到了非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)[1]
        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编码字符的文本。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-21 14:18:29 | 显示全部楼层
isdkz 发表于 2023-4-21 14:12
您好!根据您提供的代码和错误提示,问题出在向文件写入时遇到了非GBK编码的字符。为了解决这个问题,您可 ...

那请问老师后面如果遇到同样的错误代码,使用以上的方法都能解决问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-21 14:24:17 | 显示全部楼层
capp211 发表于 2023-4-21 14:18
那请问老师后面如果遇到同样的错误代码,使用以上的方法都能解决问题吗?

[b]可以解决,不过还是建议你去理解一下编码,你下次遇到这种问题可能不是使用 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))

[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 18:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表