gpt4 book ai didi

python - 如何将多个不同语言的 CSV 文件合并为一个 CSV 文件?

转载 作者:行者123 更新时间:2023-12-04 08:29:38 25 4
gpt4 key购买 nike

我有很多 CSV 文件,我想将它们合并到一个 CSV 文件中。问题是 CSV 文件包含不同语言的数据,如俄语、英语、克罗地亚语、西类牙语等。一些 CSV 文件甚至有多种语言编写的数据。
当我打开 CSV 文件时,数据看起来非常好,用他们的语言正确编写,我想用他们的语言读取所有 CSV 文件,并将它们按原样写入一个大的 CSV 文件。
我使用的代码是这样的:

directory_path = os.getcwd()
all_files=glob.glob(os.path.join(directory_path,"DR_BigData_*.csv"))
print(all_files)
merge_file='data_5.csv'
df_from_each_file=(pd.read_csv(f,encoding='latin1') for f in all_files)
df_merged=pd.concat(df_from_each_file,ignore_index=True)
df_merged.to_csv(merge_file,index=False)
如果我使用“encoding='latin1'”,它会成功地将所有 CSV 文件写入一个,但正如您可能猜到的那样,这些字符非常困惑。
以下是输出的一部分作为示例:
Horrendously, OP seems to use Excel to look at data
我还尝试使用 encoding='latin1' 将它们写入 .xlsx,但我仍然遇到了同样的问题。除了这些,我尝试了许多不同的编码,但那些给了我解码错误。

最佳答案

当您将输入编码强制为 Latin-1 时,您基本上会破坏任何实际上不是 Latin-1 的输入文件。例如,包含文本 привет 的俄语文本文件在代码页 1251 中将被默默地转换为 ïðèâåò . (UTF-8 编码中的相同文本将映射到类似的伪造但完全不同的字符串 пÑÐ¸Ð²ÐµÑ 。)
可持续的解决方案是,首先,正确识别每个文件的输入编码,其次,选择能够正确容纳所有输入编码的输出编码。
我会选择 UTF-8 作为输出,但任何 Unicode 变体在技术上都可以工作。如果您需要将结果传递给或多或少脑残的东西( 咳嗽 Microsoft 咳嗽 Java)也许 UTF-16 对您的用例更方便。

data = dict()
for file in glob.glob("DR_BigData_*.csv"):
if 'ru' in file:
enc = 'cp1251'
elif 'it' in file:
enc = 'latin-1'
# ... add more here
else:
raise KeyError("I don't know the encoding for %s" % file)
data[file] = pd.read_csv(file, encoding=enc)
# ... merge data[] as previously
if声明实际上只是更有用的东西的占位符;如果无法访问您的文件,我不知道您的文件是如何命名的,也不知道使用哪种编码。这简单地假设俄语文件的名称中都包含子字符串“ru”,并且您希望对所有这些文件使用特定的编码。
如果你只有两种编码,其中一种是 UTF-8,这其实很简单;尝试解码为 UTF-8,如果这不起作用,则回退到其他编码:
for file in glob.glob("DR_BigData_*.csv"):
try:
data[file] = pd.read_csv(file, encoding='utf-8')
except UnicodeDecodeError:
data[file] = pd.read_csv(file, encoding='latin-1')
这很可能会起作用,因为不是有效 UTF-8 的文本通常会引发 UnicodeDecodeError很快。编码的设计使第 8 位设置的字节必须遵守非常特定的模式。这是一个有用的功能,不应该让您感到沮丧。没有从文件中获取正确的数据会更糟。
如果您不知道什么是编码,那么现在是阅读 Joel Spolsky 的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 的好时机。
顺便说一句,您的计算机已经知道它在哪个目录中。您基本上不需要调用 os.getcwd()除非您需要找出当前目录的绝对路径。

关于python - 如何将多个不同语言的 CSV 文件合并为一个 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65089750/

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