【问题标题】:Why is my csv file separated by " \t " instead of commas (" , ")?为什么我的 csv 文件用“\t”而不是逗号(“,”)分隔?
【发布时间】:2020-05-23 22:48:38
【问题描述】:

我从 Internet 下载数据并保存为 csv(逗号分隔)文件。图片显示了文件在 excel 中的样子。

在 python 中使用csv.reader,我打印了每一行。我在下面显示了我的代码以及 Spyder 中的输出。

import csv

with open('p_dat.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

我很困惑为什么我的值不是逗号分隔的。任何帮助将不胜感激。

【问题讨论】:

  • 不确定这与 python 有什么关系,但看起来你有一个 TSV(制表符分隔)而不是 CSV
  • 用文本编辑器打开“.csv”文件。注意它不是“CSV”。适当调整预期/使用/出口。
  • 请不要发布代码、数据或 Tracebacks 的图像。将其复制并粘贴为文本,然后将其格式化为代码(选择它并输入ctrl-k
  • 现在“CSV”表示“字符分隔值”,而不是“逗号分隔值”。请参阅CSV 上的维基百科文章。

标签: python excel csv comma reader


【解决方案1】:

正如 cmets 中所指出的,从技术上讲,这是一个 TSV(制表符分隔),实际上是完全有效的。

当然,在实践中,并非所有库都会在 TSV 和 CSV 之间做出“硬”区分。解析 TSV 的方式与解析 CSV 的方式基本相同,只是分隔符不同。

这种文件实际上有多个有效的分隔符,例如制表符、逗号和分号。老实说,您选择哪一个只是偏好问题,而不是“硬”的技术限制。

【讨论】:

    【解决方案2】:

    the specification for csvs。文件中的分隔符有很多选项。在这种情况下,您有一个标签,\t

    这个选项很重要。假设您的数据中有逗号,那么将, 作为分隔符将不是一个好的选择。

    【讨论】:

    • 您的最后一点并不完全正确。在这种情况下,您只需在该单元格周围加上引号。 (不过,如果单元格中同时包含逗号和引号,它会变得有点难看)。
    • 更恰当地说,这些不使用逗号作为字段分隔符的文件应称为“分隔文本文件”。真正的 CSV 是使用逗号作为字段分隔符和双引号作为文本分隔符的分隔文本文件。 TSV 使用制表符而不是逗号。 Concordance and Relativity(法律审查数据库)可以使用 .DAT 文件,其中 ASCII 20 作为字段分隔符,ASCII 254 作为文本分隔符。存在更多这样的格式,其中一些带有额外的分隔符。
    【解决方案3】:

    即使它们被命名为逗号分隔值,它们有时也由不同的符号分隔(例如您当前使用的制表符)。

    如果您想使用 Python 将其视为逗号分隔的文件,您可以尝试以下操作:

     import csv
    ...
            with open('p_dat.csv', 'r') as file:
                reader = csv.reader(file)
                for row in reader:
                   commarow = row.replace("\t",",")
                   print(commarow) 
    

    【讨论】:

    • csv.reader 带有 delimiter 关键字参数,因此您可以使用它而不是在每一行中手动替换它
    猜你喜欢
    • 2015-03-15
    • 2017-11-23
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多