【问题标题】:encoding issue when reading CSV file with python使用 python 读取 CSV 文件时的编码问题
【发布时间】:2015-12-02 15:10:38
【问题描述】:

我在尝试使用 python 读取 CSV 文件时遇到了障碍。

更新: 如果您只想跳过字符或错误,您可以像这样打开文件:

with open(os.path.join(directory, file), 'r', encoding="utf-8", errors="ignore") as data_file:

到目前为止我已经尝试过了。

for directory, subdirectories, files in os.walk(root_dir):
    for file in files:
        with open(os.path.join(directory, file), 'r') as data_file:
            reader = csv.reader(data_file)
            for row in reader:
                print (row)

我得到的错误是:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 224-225: character maps to <undefined>

我试过了

with open(os.path.join(directory, file), 'r', encoding="UTF-8") as data_file:

错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\u2026' in position 223: character maps to <undefined>

现在,如果我只是打印 data_file,它会说它们是 cp1252 编码的,但如果我尝试

with open(os.path.join(directory, file), 'r', encoding="cp1252") as data_file:

我得到的错误是:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 224-225: character maps to <undefined>

我也试过推荐的包。

我得到的错误是:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 224-225: character maps to <undefined>

我要解析的行是:

2015-11-28 22:23:58,670805374291832832,479174464,"MarkCrawford15","RT @WhatTheFFacts: The tallest man in the world was Robert Pershing Wadlow of Alton, Illinois. He was slighty over 8 feet 11 inches tall.","None

感谢任何想法或帮助。

【问题讨论】:

  • cp1252,根据谷歌的说法,是一种 Windows 字符编码。你的环境是什么,文件来自哪里?比如你用nano打开csv文件,是不是说它是dos格式的?
  • 我不明白你在 nano 中打开文件是什么意思...我在 windows 机器上。
  • 哦,好的。我以为您可能使用的是 unix - 我之前在 linux 上解析 DOS 格式的文件时遇到了问题,并认为这可能是一个类似的问题。 Nano 是 Linux 系统上常见的终端文本编辑器。
  • 试试for row in reader: data = [unicode(i,'utf-8') for i in row] print data
  • 我刚试过我收到错误 UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 127: character maps to

标签: python csv encoding


【解决方案1】:

我会使用csvkit,它使用自动检测适当的编码和解码。例如

import csvkit
reader = csvkit.reader(data_file)

正如聊天中讨论的那样-解决方案是-

for directory, subdirectories, files in os.walk(root_dir): 
    for file in files: 
        with open(os.path.join(directory, file), 'r', encoding="utf-8") as data_file: 
            reader = csv.reader(data_file) 
            for row in reader: 
                data = [i.encode('ascii', 'ignore').decode('ascii') for i in row] 
                print (data)

【讨论】:

  • 谢谢,我目前无法在我的环境中安装软件包
  • 你遇到过 miniconda 吗?它不需要管理员权限即可使用。
  • for row in reader: data = [i.encode('utf-8') for i in row] print data
  • 可以发一下row的内容吗
  • 是的,所以当我使用 excel 或文本编辑器打开时,这行真的很奇怪,并且没有问题,并且是 2015-11-28 07:32:32,670581036858933248,3256765652 但从查看错误来看好像只有一个不存在的角色
猜你喜欢
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多