【问题标题】:Read unicode csv using regex in python 3在 python 3 中使用正则表达式读取 unicode csv
【发布时间】:2018-01-14 18:50:35
【问题描述】:

我有一个 excel (*.xlsx) unicode/非英语/阿姆哈拉语字符,我想将其保存为 unicode csv。似乎没有直接的方法:我首先必须在 excel 中将其保存为 unicode.txt 并在 Sublime text 3/文本编辑器中删除制表符。不幸的是,选项卡在列之间并不一致。如何在 python 中使用正则表达式将 unicode.xlsx 转换为 unicode.csv 使用正则表达式? excel 表格有一些 NaN/Blank 单元格,因此表格在列之间没有规则的间距(制表符),并且很难使用“查找和替换”将制表符替换为逗号。有什么解决办法吗? ስም የወርደሞዝ ጾታ ሥራ ዕድሜ

【问题讨论】:

  • 您可以使用std-lib csv 模块:使用delimiter='\t' 读取数据并使用默认设置写入。如果您执行“全部替换”操作,则可能会插入虚假列,以防数据已经包含逗号。
  • 但是,您确定 Excel 由于字符集而不允许导出为 CSV 吗?不能直接“另存为...”,然后手动添加“.csv”作为目标文件名的文件扩展名吗?
  • @lenz 我尝试使用 unicode 编码选项将 xlsx 文件另存为 csv,但它仍然忽略 unicode 编码并在我打开它时给出问号。我发现问题不在于使用例如 pandas、pd.read_csv 读取文件,编码本身无法识别。
  • 我了解到您正在尝试使用 MS Excel 设置工作流程,并且 MS 工具对纯文本的 Unicode 编码的系统区分是一种痛苦。而且我认为您提出的解决方案(使用 RegEx 替换)不会减轻您的痛苦。但恐怕我无法为您提供更多帮助,因为有太多未指定的、可能相关的详细信息(例如,您为什么还要导出为 CSV 并在 Excel 中重新打开)。

标签: regex python-3.x csv unicode xlsx


【解决方案1】:

Excel 2016 可以选择另存为“CSV UTF-8(逗号分隔)”。这应该对你有用,除非你使用标签附加到 UTF-16LE,这是你从“Unicode 文本”中得到的。

如果您的 Excel 没有该选项,则此 Python 3 代码将对其进行转换:

import csv

with open('book1.txt','r',encoding='utf16',newline='') as f1, \
     open('book1.csv','w',encoding='utf-8-sig',newline='') as f2:

    r = csv.reader(f1,dialect='excel-tab')
    w = csv.writer(f2,dialect='excel')
    for line in r:
        w.writerow(line)

【讨论】:

  • @Kaleab 那么您可能没有使用 Excel 2016 :^) 这可能是一项新功能。您应该在“Unicode 文本”不适合您的地方添加一些示例数据。在我的测试中,各列之间的选项卡似乎是一致的。
  • 我使用的是 Excel 2016。我能想到的最好解释是 lenz 对微软的“系统性歧视外语”。
猜你喜欢
  • 2017-01-25
  • 2020-03-16
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多