gpt4 book ai didi

Python: Pandas 数据框:删除 " "BOM 字符

转载 作者:行者123 更新时间:2023-12-05 01:38:09 31 4
gpt4 key购买 nike

我在 Linux 机器上使用 Scrapy 抓取了一些网站并保存在 CSV 中。当我检索数据集并在 Windows 机器上查看时,我看到了这些字符 。这是我将它们重新编码为 UTF-8-SIG 的方法:

import pandas as pd

my_data = pd.read_csv("./dataset/my_data.csv")
output = "./dataset/my_data_converted.csv"
my_data.to_csv(output, encoding='utf-8-sig', index=False)

所以如果在 VSCode 上查看,它们现在变成了 ?。但是如果我在 Notepad++ 上查看,我看不到这些。我如何真正将它们全部删除?

最佳答案

根据您的评论,我想您最终得到了两个 BOM。

让我们看一个小例子。我使用内置的 open 而不是 pd.read_csv/pd.to_csv,但是 encoding 参数相同

让我们创建一个保存为带有 BOM 的 UTF-8 的文件:

>>> text = 'foo'
>>> with open('/tmp/foo', 'w', encoding='utf-8-sig') as f:
... f.write(text)

现在让我们重新读一遍。但我们使用不同的编码:“utf-8”而不是“utf-8-sig”。在您的情况下,您根本没有指定编码参数,但默认值很可能是“utf-8”或“cp-1252”,它们都保留 BOM。因此,以下内容或多或少等同于您的代码片段:

>>> with open('/tmp/foo', 'r', encoding='utf8') as f:
... text = f.read()
...
>>> text
'\ufefffoo'
>>> with open('/tmp/foo_converted', 'w', encoding='utf-8-sig') as f:
... f.write(text)

BOM 被阅读为文本的一部分;它是第一个字符(此处表示为 "\ufeff")。

让我们使用合适的命令行工具查看文件中的实际内容:

$ hexdump -C /tmp/foo
00000000 ef bb bf 66 6f 6f |...foo|
00000006
$ hexdump -C /tmp/foo_converted
00000000 ef bb bf ef bb bf 66 6f 6f |......foo|
00000009

在 UTF-8 中,BOM 编码为三个字节 EF BB BF。显然,第二个文件有两个。因此,即使 BOM 感知程序也会在 foo_converted 的开头找到一些无意义的字符,因为 BOM 仅被剥离一次。

关于Python: Pandas 数据框:删除 " "BOM 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60064238/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com