Python脚本由于Unicode编码错误而在下载的文件中出现问题。

23 浏览
0 Comments

Python脚本由于Unicode编码错误而在下载的文件中出现问题。

我每天运行一个脚本4次,使用requests模块下载文件,然后将其放入数据库中。10次中有9次,脚本运行得非常顺利。但是有时候它不工作,是因为下载的文件中有一个字符,我的脚本无法处理。例如,今天我收到的错误是:UnicodeEncodeError: 'ascii' codec can't encode characters in position 379-381: ordinal not in range(128)。我用另一种方式下载了文件,并找到了导致脚本停止的字符,位置在380处,是"∞"。这是我的脚本出现问题的地方:

##### 请求文件

r = requests.get('https://resources.example.com/requested_file.csv')

##### 创建可导入数据库的CSV文件

ld = open('/requested_file.csv', 'w')

print(r.text, file=ld)

我知道这可能与在将文件打印到.csv文件之前对文件进行编码有关,对于那些知道该怎么做的人来说可能很简单,但经过多个小时的研究,我快要哭了。提前感谢您的帮助!

0
0 Comments

Python脚本由于Unicode编码错误而无法处理下载的文件。这个问题的出现原因是文件的默认编码为ASCII,而ASCII编码是一种非常有限的编码方式。解决方法是提供一个编码,可以使用UTF-8编码来代替。代码如下:

with open('/requested_file.csv', 'w', encoding='utf8') as ld:
    print(r.text, file=ld)

然而,由于你是从URL加载文件,所以现在需要对数据进行解码和再编码。更好的方法是直接将数据作为字节流复制到磁盘上。可以使用流式请求,然后使用`shutil.copyfileobj()`函数将数据按块复制。这样可以处理任何大小的响应,而无需将所有数据加载到内存中。代码如下:

import requests
import shutil
r = requests.get('https://resources.example.com/requested_file.csv', stream=True)
with open('/requested_file.csv', 'wb') as ld:
    r.raw.decode_content = True  # 解压gzip或deflate响应
    shutil.copyfileobj(r.raw, ld)

然而,现在出现了一个不同但类似的错误:"UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 379: ordinal not in range(128)"。这似乎是一个新的问题,表示某些内容正在尝试将字节解码为ASCII。对于你发布的代码,这可能意味着服务器告诉`requests`文本数据使用ASCII编码,但实际上并不是这样。`C3`不是一个有效的ASCII码点。为了解决这个问题,最好在二进制模式下打开文件,并直接复制数据。不进行解码和编码。

0
0 Comments

在这段代码中,出现了一个Unicode编码错误的问题。原因是从下载的文件中读取的内容包含了非ASCII字符,导致脚本无法处理。

为了解决这个问题,代码中使用了io模块来处理文件的编码。首先,通过使用requests模块从指定的URL下载文件。然后,将下载的文件内容写入一个临时文件中。接下来,通过使用io.open函数打开临时文件,指定编码为utf-8,并忽略编码错误。然后,再次打开同一临时文件,但是这次指定编码为ascii,并同样忽略编码错误。最后,通过循环遍历文件中的每一行,并将其分隔后写入到新的临时文件中。

这样做的目的是将非ASCII字符过滤掉,确保文件中只包含ASCII字符。这样,脚本就能够顺利处理文件,而不会出现Unicode编码错误。

总结起来,要解决Python脚本在下载文件时出现Unicode编码错误的问题,可以通过使用io模块处理文件编码,将非ASCII字符过滤掉,确保文件中只包含ASCII字符。这样,脚本就能够正常处理文件,避免出现编码错误。

0